1.1 网络爬虫简介
1.1.1 网络爬虫的概念与类别
1.概念
当前社会已经迈入大数据时代,互联网中的数据是海量的,如何自动高效地获取互联网中有用的信息是一个重要问题,而网络爬虫技术就是为解决这些问题而生的。
当下的网络就像一张大型的蜘蛛网,分布于蜘蛛网各个节点的即是数据,那么Web Crawler(网络爬虫)即是小蜘蛛,沿着网络“捕获”食物(即数据),而网络爬虫是指按照一定的规则,自动地抓取网络信息的程序或者脚本。从专业角度来讲,请求目标的行为是经由程序模仿搜索引擎发出的,爬到本地的是目标返回的HTML代码、JSON数据、二进制数据、图片、视频等,从中提取需要的数据并存储起来使用。
2.常见的网络爬虫
搜索引擎如何获得一个新网站的URL?主要描述如下:
(1)主动向搜索引擎提交网站。
(2)在其网站里设置外联。
(3)搜索引擎会和DNS服务商进行合作,能够快速采集新的网站。
常见的网络爬虫有以下几种。
· 通用网络爬虫:也叫全网爬虫,主要为门户网站站点搜索引擎和大型Web服务提供商采集网络数据。
通用网络爬虫并不是一切皆可爬取,它也要遵循Robots协议。通用网络爬虫的工作流程为:抓取网页→存储数据→内容处理→提供检索→排名服务。
通用网络爬虫的缺点有:仅提供与文本相关的内容(如HTML、Word、PDF等),而无法提供多媒体文件(如音乐、图片、视频)和二进制文件,提供的结果一成不变,无法针对不同背景领域的人提供不同的搜索结果,不能提供人类语义上的检索;具有局限性,所返回的网页里90%的内容无用,中文搜索引擎的自然语言检索理解困难,信息占有量和覆盖率存在局限,以关键字搜索为主是搜索引擎最主要的作用之一,对于图片、数据库、音频、视频多媒体的内容无计可施;搜索引擎的社区化和个性化欠缺,大多数搜索引擎无法考虑人的地域、性别、年龄的差别,且抓取动态网页效果不好。
· 聚焦网络爬虫:网络爬虫程序员写的针对某种内容的网络爬虫,面向主题网络爬虫、面向需求网络爬虫,会针对某种特定的内容去抓取信息,并且保证内容需求尽可能相关。聚焦网络爬虫是为解决通用网络爬虫的缺点而出现的。
· 积累式网络爬虫:从头到尾,不断抓取,过程中会进行反复操作。
· 增量式网络爬虫:采用增量式更新和仅抓取新产生的或者已经发生变化的网页的网络爬虫,出现在已下载的网页。
· 深层网络爬虫:Web页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web)。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。深层网页是指那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。
3.增量式网络爬虫
增量式网络爬虫(Incremental Web Crawler)的体系结构包括爬行模块、排序模块、更新模块、本地页面集、待爬行URL集及本地页面URL集。
增量式网络爬虫为确保本地页面集中存储的页面是最新页面并进一步提高本地页面集中页面的质量,经常使用的方法有:
(1)统一更新法:网络爬虫以相同的频率访问全部网页,不考虑网页的改变频率。
(2)个体更新法:网络爬虫按照个体网页的改变的频率重新访问各页面。
(3)基于分类的更新法:网络爬虫根据网页改变的频率把页面划分为更新较快网页子集和更新较慢网页子集两类,而后以不同的频率访问这两类网页。
为实现个体更新法,增量式网络爬虫需要对网页的重要性排序,一般常用的策略有广度优先策略、PageRank优先策略等。IBM开发的WebFountain增量式网络爬虫功能强大,它采用一个优化模型控制爬行过程,并没有对页面变动过程做一概统计假设,而是按照先前爬行周期里的爬行成果和网页的实际变化速度对页面的更新频率进行调整,采用的是一种自适应的方法。北京大学的天网增量爬行系统的目的是爬行国内Web,把网页划分为变化网页和新网页两类,分别采用不同爬行策略。为减缓对大量网页变化历史维护导致的性能难题,它按照网页变化的时间局部性规律,在短时期内直接爬行屡次变化的网页,为尽快取得新网页,它操纵索引型网页追踪新出现的网页。
4.深层网络爬虫
1)基于领域知识的表单填写
此方式一般会维持一个本体库,经由语义分析来选取合适的关键词填写表单。利用一个预定义的领域本体知识库来识别深层网页的页面内容,同时利用一些来自Web站点的导航模式来辨认主动填写表单时所需进行的路径导航。
2)基于网页结构分析的表单填写
此方式通常无领域知识或有唯一有限的领域知识,把网页表单表示成DOM树,从中提取表单各字段值。Desouky等提出一种LEHW方法。该方法把HTML网页表示为DOM树形式,把表单区分为单属性表单和多属性表单,分别进行处理;孙彬等提出一种基于XQuery的搜索系统,它能够模拟表单和特殊页面的标记切换,把网页关键字切换信息描述为三元组单元,依照一定规则排除无效表单,把Web文档构造成DOM树,利用XQuery把文字属性映射到表单字段。