网页搜集系统

阅读:293 2019-03-19 14:40:18 来源:开源中国

自1994年万维网出现后,互联网上的网页数量就呈指数级生长,到目前为止,短短二十余年,互联网上就有成百上千亿网页。如何在这海量的网页中搜索下载具有对特定场景有价值的网页?使用什么样的策略能保证网页不会出现重复?如何保证爬虫程序的高并发爬取?如何在网页中提取关键点等等问题,这是本篇博客重点描述的内容。

经过以上分析,我们可以得出,爬虫应尽可能从蝴蝶型的左部出发,或从中部的网页开始遍历。

网络爬虫是网页搜集系统最重要的一部分之一,它是搜索引擎工作的基础。本节中将介绍网络爬虫的基础概念、分布式爬虫的架构、一些爬取网页的策略以及robots协议等。

爬虫,它通过下载一个网页,分析其中的链接,继而去访问其它链接指向的网页,周而复始进行,直到磁盘满或人工干预,爬虫的功能归结为两点:下载网页和发现url。

爬虫访问网页和浏览器有着相同的方式,同样也都是都是使用http协议和网页服务器交互。流程主要如下[2]:

1.客户端程序(爬虫程序)连接到一个dns服务器上。dns服务器将主机名转换呈ip地址,因为爬虫程序会频繁的查询dns服务器,所以可能会造成类似于拒绝服务攻击(dos)的副作用,所以在很多爬虫程序实现中都会增加dns缓存,以减少很多不必要的dns服务器查询,在商业搜索引擎中,一般都会搭建自己的dns服务器。2.建立连接后,客户端会发送一个http请求给网络服务器,以请求一个页面。常见的http请求是get请求,如:gethttp://www.sina.com.cn/index.htmlhttp/1.1该命令表示请求服务器使用http1.1协议规范1.1版本,将页面www.sina.com.cn/index.html页面返回给客户端。当然客户端也可使用post命令访问网络服务器。同样,爬虫程序也会频繁的使用get命令,而使用该命令后会将页面所有内容返回给客户端,在网页重访(因为很多网页会更新,所以需重访网页以得到最新的网页内容)时,尝试用head命令访问服务器,该命令则是要求将网页的head部分返回给客户端,该head部分包含了网页的最后更新时间(last-modified)字段,在比对数据库中该网页的此字段后,就可避免大量未更新网页的下载。3.分析网页中的url链接,将它们插入一个队列中,同时提取网页中的重要内容存储到数据库中。队列的主要特点是fifo,每次将新发现的url插到队列尾部,然后取得从队列头部取得下一待访问url,这样循环反复进行,直到队列为空,这便是常说的宽度优先遍历。

经过以上三个步骤便实现了一个简单的网络爬虫。但其中还有很多问题,例如:

1)如何避免访问重复url(访问重复url将会导致无限循环);

2)爬虫需遵循的robots协议等;

3)如何避免因频繁的访问导致网络服务器“发怒”;

4)如何设计本课题中电子产品页面采集策略;

5)分类器;

6)网页格式的转换问题;

7)如何设计网页的存储结构以及选择什么样的数据库存储海量网页页面;

8)因为网页也会因为过期,如何设计重访网页策略;

9)如何高效率地爬取网页(将在1.3节中讲解);

url重复避免

避免url重访是一个很关键的问题,如果url重复访问,必然会导致一个无限的递归访问,直至资源穷尽。一般的策略是维护两个表:visited_table和unvisited_table,visited_table表示已访问url的表,而unvisited_table相当于一个“任务池”,爬虫不断地从unvisited_table中取得待访问url,这样就避免了网页的重复访问。工作步骤如下:

1.为爬虫线程添加一个control进程,此进程主要功能是控制爬虫爬取网页,维护两个url表等,相当于一个控制器。

2.爬虫每次爬取网页时,从unvisited_table中取得url,下载网页后,对网页进行一系列处理插入到数据库中,同时分析网页中的链接,将链接递交到control进程。

3.control进程在得到爬虫url链接后,比对visited_table,看其中是否存在,若不存在,则将该url插入到unvisited_table中,同时会返回一个url给爬虫,爬虫继续爬取该url。

下一篇: Varnish 4.0 实战
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服