(1)用BFS还是DFS?
不考虑时间因素,互联网静态不变的情况下,认为两者能够在大致的时间里完成所有的整个静态网页的爬取工作。
工程上,做不到,网络爬虫更应定义为“如何在有限的时间里最多的爬下那些重要的网页”,一般认为一个网页的首页是最重要的。因此BFS优于DFS。
但并非不使用DFS,这和爬虫的分布式结构以及网络通信的握手成本有关,“握手”指下载服务器与网站的服务器建立通信的过程。
时间网络爬虫是由成百上千万台服务器组成的分布式系统,对于某一个网页,一般由特定的一台或者几台服务器专门下载,这样可以避免握手次数太多。
实际应用的网络爬虫不是对网页次序的简单BFS或者BFS,而是一个相对复杂的下载优先级排序的方法,叫做“调度系统”(Scheduler),会有一个优先队列(Priority Queue)。BFS成分更加多一些。
(2)网页的分析和URL提取
除了HTML以外,不少网页是一些脚本语言(比如JavaScript)生成。
(3)记录访问过的URL,URL表
哈希表判重:在一台下载服务器上建立和维护一张哈希表并不难,如果是分布式,多台服务器一起下载网页,就会出现问题:
1、哈希表太大,一台下载服务器存不下。
2、每台下载服务器在开始下载前和完成下载后都要维护这张哈希表,存储哈希表的通信就成为爬虫系统的瓶颈。
扫描二维码关注公众号,回复:
10637130 查看本文章
比较好的问题2的解决方法:A、明确每台下载服务器的分工,一看到某个URL就知道交给哪台服务器去执行B、批量处理,减少通信的次数。