我们身边接触最频繁、同时也是最大的爬虫莫过于几大搜索引擎。但是搜索引擎的爬取方式和我们爬虫工程师接触的方式差异比较大,没有太大的参考价值,我们今天要讲的是舆情方向的爬虫(架构以及关键技术原理),主要涉及:
1.网页文本智能提取;
2.分布式爬虫;
3.爬虫 DATA/URL 去重;
4.爬虫部署;
5.分布式爬虫调度;
6.自动化渲染技术;
7.消息队列在爬虫领域的应用;
8.各种各样形式的反爬虫;
一、网页文本智能提取
舆情其实就是舆论情况,要掌握舆情,那么就必须掌握足够多的内容资讯。除了一些开放了商业接口的大型内容/社交类平台(例如微博)之外,其他都需要依靠爬虫去采集。因此,舆情方向的爬虫工程师需要面对的是千千万万个内容和结构都不同的站点。我们用一个图来表示他们面对的问题:
没错,他们的采集器必须要能够适配千千万万个站点的结构,从风格迥异的 HTML 文本中提取出主体内容——标题、正文、发布时间和作者。
如果是你,你会用什么样的设计来满足业务需求呢?
曾经我也设想过这样的问题,在技术群里也看到有群友提出类似的问题,但是很难得到满意的答案。有的人说:
1.用归类法,相似的内容归类到一起,然后给一类内容配置提取规则;
2.用正则,提取指定标签中的内容;
3.用深度学习,NLP 语义分析出哪里是有意义的内容,提取出来;
4.用计算机视觉,让人去点击,然后按照页面相似度分类提取(其实就是归类法的自动化版本);
5.用算法,计算出文本的密度,然后提取;
总之各种各样的想法层出不穷,但是最后都没有听到实际应用的消息。目前来说,大部分公司使用的都是人工配置 XPATH 规则的方式,采集的时候通过网址来匹配对应的提取规则,然后调用规则来实现多站点的爬取。这种方法很有效,而且在企业中应用已久,比较稳定,但缺点也显而易见——费时间、费人工、费钱!
偶有一天,我在微信技术群里看到有人(优秀的 Python 工程师青南)发表了一个用于自动化提取文本的算法库, GeneralNewsExtractor [1] (以下简称 GNE)。这个库参考了武汉邮电科学研究院洪鸿辉、丁世涛、黄傲、郭致远等人编写的论文——《基于文本及符号密度的网页正文提取方法》,并在论文的基础上用 Python 代码进行了具体实现,也就是 GNE。它的原理是通过提取网