一、Web采集介绍
Web采集是从Web中采集大量网页的过程,并且要避免采集重复或无用的页面,采集完的网页需要构建索引,以扩大搜索引擎的索引规模;
web采集通常是由多台机器并行采集;
web采集的必须功能
(1)Web采集器需要识别采集器陷阱(spider traps),比如当采集器访问到某个web服务器的网页时,此网页会生成无限多个网页被采集器采集,从而使得采集器不能跳出;
(2)web服务器都有一个政策,比如服务器每5秒只能访问一次,因此采集器必须遵循这些规则;
web采集的可选功能
1.分布式:采集器有多个节点;
2.即时更新:将原始抓取的网页进行更新;
3.功能可扩展性:可以增加协议;
二、Web采集流程
web采集过程类似于遍历web图的过程;
1.设定一个或多个URL作为种子集合,并放入URL等待池;
2.抽取URL:在URL池中取出一个URL,并在URL池中删除这个URL(如果是连续式采集,则可以不用删,因为以后还会采集此URL进行页面更新);
3.采集网页;
4.分析网页,并抽取出文本和链接,文本放入索引器,链接首先检查是否已被采集、是否内容相同、是否满足robots.txt文件,如果未被采集、内容不同、满足robot,则放入URL等待池(URL Frontier)(通过shingle方法判断内容重复),等待被采集;
对于连续式采集,抽取URL后不一定要删除URL池中的,因为以后还会被采集;
Content Seen处理内容重复;
URL Filter处理robots文件的问题;
URL duplication处理URL已采集问题;
web采集器的模块
(1)URL池;
(2)DNS解析器;
(3)抓取模块;
(4)分析模块;
(5)URL去重模块;
web服务器通过拒绝蜘蛛协议(robot exclusion protocol)对采集器进行限制,通过在web目录下放置robots.txt;
在访问web服务器的页面之前,必须先抓取robots.txt文件,放入缓存(加快速度);
注意:在判定URL是否放入URL池的时候就需要去抓取robots.txt判定,在真正抓取页面之前必须访问robots.txt文件进行判定,因为放入URL池后,robots文件可能会改变;
在URL池取出URL的时候需要考虑不能一直返回相同Web服务器的URL,礼貌问题;
以上是前端队列,当URL放入URL池时,会分配一个优先级,并放入特定的队列;
上图是后端队列,每个队列对应一个主机;
需要保证在采集时后端队列的每个队列不能为空;
Heap的每个元素对应一个后端队列,表示一个web服务器所能再次被访问的最早时间;
分布式web采集
有多个采集器,分布在世界各地;每个采集器
采集器和原来差不多,只是多了主机划分器,并且URL查重模块需要接收其他机器发来的URL;
Host Splitter是主机划分器,宗旨是采集器需要采集的网页是地理位置相邻的web服务器的网页,因此需要有这个主机划分器进行分配URL;
DNS(Domain Name Service)服务器:用来将URL解析成IP的机器;
DNS解析:将URL解析成IP地址;
DNS服务器通常会有多个,因此是分布式的;
DNS解析的时间很长,所以可以通过DNS缓存加快速度;