智能化解析
爬虫的智能化解析就是不再需要我们针对某一些页面来专门写提取规则了,我们可以利用一些算法来计算出来页面特定元素的位置和提取路径。比如一个页面中的一篇文章,我们可以通过算法计算出来,它的标题应该是什么,正文应该是哪部分区域,发布时间是什么等等。
其实智能化解析是非常难的一项任务,比如说你给人看一个网页的一篇文章,人可以迅速找到这篇文章的标题是什么,发布时间是什么,正文是哪一块,或者哪一块是广告位,哪一块是导航栏。但给机器来识别的话,它面临的是什么?仅仅是一系列的 HTML 代码而已。那究竟机器是怎么做到智能化提取的呢?其实这里面融合了多方面的信息。
- 标题。一般它的字号是比较大的,而且长度不长,位置一般都在页面上方,而且大部分情况下它应该和 title 标签里的内容是一致的。
- 正文。它的内容一般是最多的,而且会包含多个段落 p 或者图片 img 标签,另外它的宽度一般可能会占用到页面的三分之二区域,并且密度(字数除以标签数量)会比较大。
- 时间。不同语言的页面可能不同,但时间的格式是有限的,如 2019-02-20 或者 2019/02/20 等等,也有的可能是美式的记法,顺序不同,这些也有特定的模式可以识别。
- 广告。它的标签一般可能会带有 ads 这样的字样,另外大多数可能会处于文章底部、页面侧栏,并可能包含一些特定的外链内容。
目前发现有如下几种算法或者服务对页面的智能化解析做的较好:
算法 | 介绍 | 网址 |
---|---|---|
Diffbot | 国外的一家专门来做智能化解析服务的公司 | https://www.diffbot.com |
Boilerpipe | Java 语言编写的一个页面解析算法 | https://github.com/kohlschutter/boilerpipe |
Embedly | 提供页面解析服务的公司 | https://embed.ly/extract |
Readability | 是一个页面解析算法,但现在官方的服务已经关闭了 | https://www.readability.com/ |
Mercury | Readability 的替代品 | https://mercury.postlight.com/ |
Goose | Java 语音编写的页面解析算法 | https://github.com/GravityLabs/goose |