首发于 一起学爬虫
发布一个智能解析库 Gerapy Auto Extractor

发布一个智能解析库 Gerapy Auto Extractor

之前我写过几篇文章介绍过有关爬虫的智能解析算法,包括商业化应用 Diffbot、Readability、Newspaper 这些库,另外我有一位朋友之前还专门针对新闻正文的提取算法 GeneralNewsExtractor,这段时间我也参考和研究了一下这些库的算法,同时参考一些论文,也写了一个智能解析库,在这里就做一个非正式的介绍。

引入

那首先说说我想做的是什么。

比如这里有一个网站,网易新闻, https://news.163.com/rank/,这里有个新闻列表,预览图如下:



任意点开一篇新闻,看到的结果如下:



我现在需要做到的是在不编写任何 XPath、Selector 的情况下实现下面信息的提取:

对于列表页来说,我要提取新闻的所有标题列表和对应的链接,它们就是图中的红色区域:



这里红色区域分了多个区块,比如这里一共就是 40 个链接,我都需要提取出来,包括标题的名称,标题的 URL。

我们看到页面里面还有很多无用的链接,如上图绿色区域,包括分类、内部导航等,这些需要排除掉。

对于详情页,我主要关心的内容有标题、发布时间、正文内容,它们就是图中红色区域:



其中这里也带有一些干扰项,比如绿色区域的侧边栏的内容,无用的分享链接等。

总之,我想实现某种算法,实现如上两大部分的智能化提取。

框架

之前我开发了一个叫做 Gerapy github.com/Gerapy/Gerap 的框架,是一个基于 Scrapy、Scrapyd 的分布式爬虫管理框架,属 1.x 版本。现在正在开发 Gerapy 2.x 版本,其定位转向了 Scrapy 的可视化配置和调试、智能化解析方向,放弃支持 Scraypd,转而支持 Docker、Kubernetes 的部署和监控。

对于智能解析来说,就像刚才说的,我期望的就是上述的功能,在不编写任何 XPath 和 Selector 的情况下实现页面关键内容的提取。

框架现在发布了第一个初步版本,名称叫做 Gerapy Auto Extractor,名字 Gerapy 相关,也会作为 Gerapy 的其中一个模块。

GitHub 链接: github.com/Gerapy/Gerap

现在已经发布了 PyPi, https://pypi.org/project/gerapy-auto-extractor/,可以使用 pip3 来安装,安装方式如下:

安装完了之后我们就可以导入使用了。

功能

下面简单介绍下它的功能,它能够做到列表页和详情页的解析。

列表页:

详情页:

先暂时实现了如上内容的提取,其他字段的提取暂时还未实现。

使用

要使用 Gerapy Auto Extractor,前提我们必须要先获得 HTML 代码,注意这个 HTML 代码是我们在浏览器里面看到的内容,是整个页面渲染完成之后的代码。在某些情况下如果我们简单用「查看源代码」或 requests 请求获取到的源码并不是真正渲染完成后的 HTML 代码。

要获取完整 HTML 代码可以在浏览器开发者工具,打开 Elements 选项卡,然后复制你所看到的 HTML 内容即可。

先测试下列表页,比如我把 news.163.com/rank/ 这个保存为 list.html,



然后编写提取代码如下:

就是这么简单,核心代码就一行,就是调用了一个 extract_list 方法。

运行结果如下:

可以看到想要的内容就提取出来了,结果是一个列表,包含标题内容和标题链接两个字段,由于内容过长,这里就省略了一部分。

接着我们再测试下正文的提取,随便打开一篇文章,比如 https://news.ifeng.com/c/7xrdz0kysde,保存下 HTML,命名为 detail.html。



编写测试代码如下:

运行结果如下:

成功输出了标题、正文、发布时间等内容。

这里就演示了基本的列表页、详情页的提取操作。

算法

整个算法的实现比较杂,我看了几篇论文和几个项目的源码,然后经过一些修改实现的。

其中列表页解析的参考论文:

详情页解析的参考论文和项目:

这些都是不完全参考,然后加上自己的一些修改最终才形成了现在的结果。

算法在这里就几句话描述一下思路,暂时先不展开讲了。

列表页解析:

详情页解析:

后面等完善了之后再详细介绍算法的具体实现,现在如感兴趣可以去看源码。

说明

本框架仅仅发布了最初测试版本,测试覆盖度比较少,目前仅仅测试了有限的几个网站,尚未大规模测试和添加对比实验,因此准确率现在还没有标准的保证。

参考:关于详情页正文的提取我主要参考了 GeneralNewsExtractor 这个项目,原项目据测试可以达到 90% 以上的准确率。

列表页我测试了腾讯、网易、知乎等都是可以顺利提取的,如:







后面会有大规模测试和修正。

项目初版,肯定存在很多不足,希望大家可以多发 Issue 和提 PR。

另外这里建立了一个 Gerapy 开发交流群,之前在 QQ 群的也欢迎加入,以后交流就在微信群了,大家在使用过程遇到关于 Gerapy、Gerapy Auto Extractor 的问题欢迎交流。

这里放一个临时二维码,后期可能会失效,失效后大家可以到公众号「进击的Coder」获取加群方式。



待开发功能

最后感谢大家的支持!

两个鬼故事白光灯男孩起名韩国大全洋气英文商标起名gta5配置高档化妆品起名男女诗经取名起名大全楚辞取名起名测字随风视频生鲜新店起名黎米京廷全文免费阅读无弹窗起名荣心累了美名宝宝起名网神武人物装饰占卜起名称大全爱是一颗幸福的子弹剧情建材建材公司起名取名给祖国母亲的一封信胡姓起名字合富金生教父的荣耀键盘连点兽药起名重生1942复仇者联盟字幕下载年属鼠人人起名字姓窦的女孩起名字大全日本音乐大师运算定律科技公司英文起名少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化