引子

如果当初让我去问顾客他们想要什么,他们肯定会告诉我:“一匹更快的马。” — 亨利福特

如今是人工智能大红大紫的时代,不管是 ChatGPT 仍是随之而来的各种智能应用,让许多人看到行将到来的在几年前几乎不行幻想的科幻世界。不过,在爬虫领域,人工智能似乎还没有过多触及。固然,爬虫作为一项“陈旧”的技能,在过去 20 多年缔造了搜索引擎、新闻聚合、数据剖析等多而又多的技能行业,不过在如今还暂时没有看到明显的技能打破:爬虫工程师仍是首要依赖于 XPath、逆向等技能来主动获取网络数据。不过,跟着人工智能和机器学习的开展,爬虫技能理论上也能够做到“主动驾驶”。本篇文章,将从多个维度介绍所谓智能爬虫(智能化、主动化数据提取爬虫技能)的现状以及可能的未来开展方向。

爬虫技能现状

爬虫程序是一种主动化的程序,用于从互联网或其他计算机网络上获取数据。它们一般使用主动化数据抓取技能来主动拜访网站,并收集、解析和存储网站上的信息。这些信息可所以结构化或非结构化数据。

传统意义上的爬虫技能首要包含以下模块或体系:

  1. 网络恳求:对网站或网页建议 HTTP 恳求,获取 HTML 等数据;
  2. 网页解析:对 HTML 进行解析,构成结构化的树形结构,并经过 XPath 或 CSS Selector 获取方针数据;
  3. 数据储存:将解析后的结构化数据进行存储,可所以数据库,也可所以文件方法;
  4. URL 办理:担任办理待抓取的URL列表和现已抓取的URL列表,例如分页或列表页的 URL 解析和恳求。

浅谈算法:关于智能爬虫的探索

以上都是根底的爬虫技能模块,关于大型爬虫体系来说,还需求具有使命调度、过错办理、日志办理等生产环境必要模块。笔者的爬虫办理渠道 Crawlab 便是用于企业级生产环境爬虫办理渠道。别的,针对一些反爬措施,例如验证码或 IP 封闭,一般还需求额定模块,例如验证码辨认、IP 署理等。

然而,现在爬虫程序的开发首要会集在网页解析上,这也是十分消耗人力的地方。尽管 HTML 需求解析网页数据,可是不同网站的网页布局、排版、风格、内容各不相同,导致每个网站、网页都需求独自编写解析逻辑,从而大大增加了人工编写本钱。尽管一些通用爬虫例如搜索引擎爬虫能够不必编写过多解析逻辑,但这样的爬虫一般都无法聚焦于某些特定的主题数据提取。因而,为了下降人工编写本钱,最好是不需求编写或少量编写解析逻辑就能够主动提取网页数据,这也便是智能爬虫的首要方针。

已知完成方法

要完成智能化网页提取并不简略,但现在现已有一些关于智能爬虫开发的尝试。其间,青南开发的 GNE (GeneralNewsExtractor) 是网页正文提取的开源完成,依据文本及标点符号密度提取算法。崔庆才开发的 GerapyAutoExtractor 依据列表簇及 SVM 算法 完成了网页列表页辨认。八爪鱼 (Octoparse),一个商业客户端软件,现已开发出主动列表辨认模块。国外的 Diffbot 是一个依据 API 的智能网页辨认渠道,辨认精确率十分高,号称有 99%。关于已知的智能爬虫完成方法,现在首要依据网页 HTML 结构以及内容,例如 GNE 和 GerapyAutoExtractor。关于商用软件例如八爪鱼、Diffbot,咱们无法得知详细完成方法。

探究列表页辨认

现在正文辨认的精确率现已十分高了,详细也有许多技能完成和应用。在这儿咱们首要重视列表页的辨认,这是许多爬虫程序的网页解析作业。

咱们能够从经验来推断怎么主动辨认想要的内容。人类是视觉动物。当咱们看到一个文章列表的网页,不出意外会立马辨认到这个文章的列表,如下图。可是,咱们究竟是怎么辨认出来的呢?其实,咱们自然将同一类的文章列表项归为一类了。因而,咱们会很快意识到这其实是一个列表页。当然,为何这些列表项是相似的呢?咱们能够看到这些列表中的子元素也附近,因而自然而然将其联络在一起。各个子元素加总在一起成为独自一个列表项,然后咱们的大脑主动将其归为一类。这便是列表页辨认的过程。

浅谈算法:关于智能爬虫的探索

依据这样的剖析,其实十分简略联想到机器学习中的聚类算法,咱们需求做的只是将网页各个节点特征提取出来,然后使用聚类算法筛选出同样类别的节点即可。当然,这儿的特征挑选需求重点考虑,咱们不是单纯的将 HTML 的单个节点取出来看,而是需求将其与其他节点一起关联起来提取特征,这样的话就能够得到一些不同类别的节点。然后,咱们能够依据节点簇的整体信息来筛选出想要的列表页。

当然,要用代码实际完成这样的算法,并不是一件简略的工作,需求将 HTML 各个节点进行建模(Modelling)、向量化(Vectorization)、以及依据此构建树状图(Tree-like Graph)。这是十分繁琐的工作。不过所幸的是,笔者现已使用 sklearn、networkx 等库完成了一个根底的列表页辨认体系 Webspot,能够主动辨认一个列表页上的列表元素,并且能够视觉化展示辨认的结果,如下图。

浅谈算法:关于智能爬虫的探索

关于大部分列表来说,Webspot 的辨认才能仍是不错的。尽管达不到 Diffbot 的精确度,但现在来说关于不是十分复杂的网页仍是能够精确辨认出来的。

那么,既然现已有 Diffbot 这样的列表页辨认方案,为什么还要新造轮子呢?其间一个最重要的原因是,商用且精确率高的软件例如 Diffbot 不能直接给出 XPath、CSS Selector 这样的能够重复使用的提取规矩,而咱们主动辨认其实只需求拿到需求的提取规矩即可,然后经过集成到 Scrapy、Colly 这样的开源爬虫程序里,就能够大大节省数据抓取的本钱。这也是 Webspot 现在能够带给用户的一个功用,不仅能辨认到列表页元素以及相应字段,还能够给出提取规矩,如下图。

浅谈算法:关于智能爬虫的探索

有了这样的提取规矩,只需求主动辨认一次,就能够在相似的网页中主动提取数据了。

当前,Webspot 还处于开发早期阶段,之后应该会有更多新功用以及算法的开发和优化。

未来开展

智能爬虫相当于网页上的主动驾驶,不需求太多人工的操作就能够让爬虫依照要求获取想要的数据或信息,这是许多数据需求者、爬虫工程师的理想技能。可是,现在智能爬虫还不太成熟,已有的完成和技能相对较为简略,未来或许能够经过深度学习、强化学习等技能来提高智能爬虫的辨认才能。别的,图论与人工智能的结合,配合视觉技能或许能够让智能爬虫在精确率方面有所打破。笔者会经过 Webspot 这个项目继续在智能爬虫上进行探究,解决数据提取的本钱问题。对智能爬虫开展感兴趣的朋友能够加笔者创建的沟通群。

浅谈算法:关于智能爬虫的探索

社区

如果您对笔者的文章感兴趣,能够加笔者微信 tikazyq1 并注明 “码之道”,笔者会将你拉入 “码之道” 沟通群。