V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
est
V2EX  ›  Python

这么多搞爬虫的,有木有直接解析 HTML 的呀?

  •  
  •   est ·
    est · 2015-11-02 16:02:35 +08:00 · 7611 次点击
    这是一个创建于 3338 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突然想到一个问题,大家都是先正文提取成纯文本,再做 NLP 什么的,但是实际上,格式化富文本有很多重要信息,比如斜体,粗体,这些是不是都被忽略了?
    第 1 条附言  ·  2015-11-02 16:35:01 +08:00
    进一步解释见 11 楼。。。。
    39 条回复    2015-11-06 01:25:26 +08:00
    gdm
        1
    gdm  
       2015-11-02 16:06:13 +08:00
    富文本,这不就是 beautiful soup 做的事吗?
    master13
        2
    master13  
       2015-11-02 16:07:14 +08:00
    还要爬和解析那么多 CSS !一头撞死在豆腐上算了……
    chairuosen
        3
    chairuosen  
       2015-11-02 16:08:56 +08:00   ❤️ 1
    斜体粗体有啥用。
    你应该想表达的是识别 h1 strong 这样有语意的标签吧?
    一般 python 写的爬虫都是爬特定目标网站的,不用分析 HTML 你就知道你想要什么。
    要分析 HTML 语意的爬虫是类似 Google 那种,不知道爬的网站长什么样的。
    iyaozhen
        4
    iyaozhen  
       2015-11-02 16:12:02 +08:00
    赞同楼上,楼主说的还是偏向搜索引擎的爬虫,场景不一样。
    skylancer
        5
    skylancer  
       2015-11-02 16:12:22 +08:00
    撸主先想想 hp 客户端嘛- -
    skylancer
        6
    skylancer  
       2015-11-02 16:12:43 +08:00
    ...才看到是 Py 区..
    domty
        7
    domty  
       2015-11-02 16:14:35 +08:00
    那样解析还不如干脆用 phantomjs
    鬼知道页面的 js 会不会在加载时修改页面的 css 样式
    nilai
        8
    nilai  
       2015-11-02 16:17:48 +08:00
    xpath
    dong3580
        9
    dong3580  
       2015-11-02 16:18:01 +08:00
    @master13
    存正文 html ,然后自己手动配自己的样式嘛。
    tonyVex
        10
    tonyVex  
       2015-11-02 16:26:06 +08:00
    只把正文解析出来吧。它的 css , js 需要吗?
    est
        11
    est  
    OP
       2015-11-02 16:31:24 +08:00
    @chairuosen 只是一个想法,可能没用。但是我觉得信息量丢了。。。

    首先,当然,语义是很重要的一个方面。比如 <code> 里是代码,就知道这一定是个码农发的贴子。。。。

    再比如论坛里一些帖子,有些内容,发帖人喜欢 红七醒目 。。比如做主题归纳,感觉因该提高重点文字的权重。而不是纯文本那样所有字符平等对待。

    只是一个粗略想法。。。。。我知道有不实际的地方。。。乃们就不要喷我不实际了。。。


    我的脑洞就是, NLP 是自然语言处理,那么 HLP 算不算超文本处理。。。。
    anexplore
        12
    anexplore  
       2015-11-02 16:34:33 +08:00
    渲染以后可以得到更多信息,比如位置、字体大小等等,抽取起来当然更准确;但是渲染网页还是很费时的。
    chairuosen
        13
    chairuosen  
       2015-11-02 16:35:31 +08:00
    @est 你要是想用 python 写一个通用的爬虫,确实应该这么做。 什么 NLP HLP 我就不懂啦
    est
        14
    est  
    OP
       2015-11-02 16:37:43 +08:00
    @iyaozhen
    @chairuosen
    @anexplore

    我想知道业界有没有一些比较好的 case 。

    脑洞一下,比如很多时候读到 nytimes 的文章,一些亮点主题词语是 斜体 的。有木有一个搜索引擎能统计一下:“ NYTimes 斜体名词的分类”。。。。。。。。。。这里面涉及到爬虫,数据处理,清洗,如何索引富文本。。。感觉脑细胞不够用了。希望看到有别人的案例我来抄袭一下 hahahaha
    est
        15
    est  
    OP
       2015-11-02 16:40:12 +08:00
    @chairuosen 不是通用不通用的问题,而是爬出不仅要保留文字本身的信息量,还要保留当时标题,段落。排版,展现格式,甚至页面环境等信息量。

    虽然我估计 99% 的页面,都是一种字号不分大小写不分段落标题格式通吃,但是总有那么一些出彩的页面,很注重行文的附加信息。
    chairuosen
        16
    chairuosen  
       2015-11-02 16:51:30 +08:00
    @est 我们以前是解析后的文本存一份,解析前的 Html 存一份,以备不时之需
    wlee1991
        17
    wlee1991  
       2015-11-02 16:57:09 +08:00
    TFHpple
    verydxz
        18
    verydxz  
       2015-11-02 17:30:15 +08:00
    语义网?
    hooopo
        19
    hooopo  
       2015-11-02 20:52:59 +08:00
    这个不难吧,抓取之后用 nokogiri 之类 lib 把 html 转化成 doc 对象,然后用 elastic 以 html 标签为 field 建索引,

    比如,想找<strong>标签里包含 xxx 的 page 就是一个 in field 查询。
    est
        20
    est  
    OP
       2015-11-02 20:59:24 +08:00
    @hooopo 我还以为去了隔壁 rubychina 。。。哈哈。用 ES 的确可以做到。赞。
    icedx
        21
    icedx  
       2015-11-02 21:17:05 +08:00
    是的 都忽略了

    不过感谢楼主给我的一个项目提供新的思路 wwwwwwwwww
    hitluobin
        22
    hitluobin  
       2015-11-02 21:18:37 +08:00   ❤️ 1
    @est 你的思路是非常正确的。我们现在的项目就很依赖与这种加粗,分段的 html 标记。但是处理起来非常杂,很有挑战。
    for8ever
        23
    for8ever  
       2015-11-02 21:21:35 +08:00
    用 Node.js ,炒鸡简单
    menc
        24
    menc  
       2015-11-02 21:38:08 +08:00   ❤️ 1
    @est 当然有,我给你贴一段我的本科毕业论文的一段, NLP 相关的

    以百度百科为例,现在的百度百科,已将整个文档进行了处理。在每个词条之前,加入了与该条目相关性最强的同时也是对用户最为有用的一些信息,在相关信息之后,条目正文开始之前,百度百科将整个正文的章节和不同章节的章节标题描述以及各章节的小标题罗列出来。而这些条目相关信息和条目章节信息是由百度百科的用户自行维护,由社区在后面进行审核,换言之,这些条目相关信息和条目索引是可靠性极高的人工标注,其对整理文本语料的作用不言而喻。如果能有效的利用这些信息,其准确率毫无疑问要高于纯使用程序进行主题分类。
    以百度百科的“成龙”词条为例,在成龙的词条正文开始之前,百度百科将成龙的一部分常用的个人信息罗列出来,如原名、曾用名、代表作、职业、国际、民族等等,如图 3.1 所示;在词条正文开始之前,百度百科将词条正文的目录章节标题和小标题罗列出来,如图 3.2 所示,这些标题和小标题和章节内容直接相关,而且具有极高的相关度,可以直接作为段落主题使用。
    ?1
    图 3.1 成龙的个人信息

    图 3.2 成龙的词条正文目录索引
    从图片中可以看到,这些信息的页面组成具有其规律性,查看源代码也可以看出,其源代码也具有规律性,如图 3.3 所示,可以对 HTML 源代码进行处理得到其相关信息。通过对维基百科的调查研究,我们可以发现,维基百科也具有同样的性质和特征。
    ?1
    图 3.2 成龙的个人信息目录网页源码
    事实上,我们可以认为,原本非结构化的百科网站的组织,经过不断优化,现在已经可以认为其具有一定的结构化特征,非结构化文本的粒度由以前普遍认为的篇章,转变成为现在的段落。甚至能直接从百科词条中提取出相关条目最重要的一部分知识。对于采用结构化知识的知识库,在语料处理的时候,能够直接得到一系列人工标注的知识;对于非结构化的知识库,能够以章节标题作为索引,同时拥有该词条相关的无信息噪点的文本内容。
    menc
        25
    menc  
       2015-11-02 21:40:42 +08:00
    事实上,对网页清洗的过程中,要具体情况具体分析,很多人拿百度百科和 wikipedia 的语料直接保留 inner text 训练是不理智的,很多有用的信息在网页中确实呈现半结构化的规律,比如我上面给出的成龙的例子,稍加注意,可以提取出实体相关的诸多属性,我写到论文中,但是目前没发现哪里还有人写到论文中。。
    est
        26
    est  
    OP
       2015-11-02 21:57:31 +08:00
    @menc wikipedia 的页面特定模板解析起来很有意思的。比如可以绘制出地球上人口超过 20w 的城市分布图。但是我感觉这个属于另外一个话题了。
    binux
        27
    binux  
       2015-11-02 22:15:09 +08:00
    怎么没有, 网页解析不用 html 用什么? 你以为正文提取就不用 html 信息了?
    DOM 树是做网页提取最基本的树.
    在此之上分块树, 视觉信息也很常用.
    est
        28
    est  
    OP
       2015-11-02 22:16:44 +08:00
    @binux 求分块树相关 case 。

    还有就是你们是怎么保存富文本数据的?直接 html 还是?
    binux
        29
    binux  
       2015-11-02 22:18:48 +08:00
    @est 分块树就是先做一层网页分块, 把它当做一层特征, 毎什么稀奇的. 直接存 html 就好了啊, 有什么问题?
    loading
        30
    loading  
       2015-11-02 22:20:50 +08:00 via Android
    重新挖坑?
    你去看下实现代码,看你能避开多少个。
    loading
        31
    loading  
       2015-11-02 22:22:55 +08:00 via Android
    没认真看回复,这个坑你挖得够深的!
    我只能说:到时记得传 github ,我好跪着看!
    binux
        32
    binux  
       2015-11-02 22:30:10 +08:00
    @menc https://scholar.google.co.uk/scholar?q=semi-structured+wikipedia
    这东西别说论文了... 实现都实现了...
    menc
        33
    menc  
       2015-11-02 22:33:55 +08:00
    @est 我的意思是,你的问题,已经有人完整的做过和应用到 research 中了
    menc
        34
    menc  
       2015-11-02 22:35:45 +08:00
    @binux 谢谢,之前不知道半结构化对应 keyword 是 semi structured
    menc
        35
    menc  
       2015-11-02 22:37:19 +08:00
    @est readable 算法,工业界普遍在用,正文提取算法,就是根据 div 区块大小和视觉区域对正文区域进行筛选和排查,决定有用文本和无用文本,各种语言的实现都有,印象笔记、 pocket 等一干应用都应用了该算法或者该算法的升级版
    breeswish
        36
    breeswish  
       2015-11-02 23:17:59 +08:00
    各种搜索引擎就是对这些标签进行参考的典型…
    ljdawn
        37
    ljdawn  
       2015-11-03 08:55:26 +08:00
    以前处理过这种。 也保存格式的。特定场景应用而已。 你保存相应的标签就好了
    jugelizi
        38
    jugelizi  
       2015-11-03 12:56:30 +08:00
    那么意思在你爬去之前目标网站是特定的了吧
    那么有限的规则可以成为既定的去匹配啊
    randyzhao
        39
    randyzhao  
       2015-11-06 01:25:26 +08:00
    HTML 会对内容分类处理有帮助, 实际应用中很多都会这么做.

    分开之后, NLP 还是跑不掉的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:39 · PVG 05:39 · LAX 13:39 · JFK 16:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.