错误博客( cuowu.com )发布于 2019-06-10 18:36:13

分布式信息采集

分布式信息采集教程。

对单个的网站进行信息采集时,使用一台计算机就足够了。然而,对整个网络进行信息采集则需要多台计算机。为什么不能用一台单独的计算机进行信息采集呢?主要考虑三个方面的原因。

使用多台计算机的一个原因是,将爬虫程序放在采集信息的网站附近。长距离网络连接会具有较低的吞吐量(每秒钟只备份少量的字节)和较长的延迟时间(字节数据需要经过更长距离的传输)。降低吞吐量和增大延迟时间,会使得对每个页面的请求时间也随之增加。随着吞吐量下降和延迟时间的增加,爬虫必须开放更多的连接,以便以同样的速度对页面进行备份。

例如,假设一个爬虫程序有一个传输率为 1MB/s 的网络连接。网页的平均大小为20K,那么爬虫程序每秒钟可以备份50个页面。如果被采集信息的网站和爬虫程序所在的计算机距离很近,那么数据传输率可能会达到1MB/s。然而,网站开始传输数据需要80ms的时间,因为在打开连接和发送请求之间有传输延迟。假设每次请求需要100ms的时间(80ms的延迟时间,20ms的数据传输时间)。用50乘以100ms,可以看到,在传输50个页面时需要5秒钟的时间,其中包括延迟等待时间。这意味着,在一秒钟内传输50个页面需要使用5个连接。如果被采集信息的网站和爬虫程序所在的计算机距离很远,网站的平均吞吐量为100K/s,500ms的延迟时间,那么处理每一个请求需要600ms。50×600ms=30s。这时,1秒钟内要传输50个页面需要30个连接。

使用多台计算机用于信息采集的另外一个原因是,为了减少爬虫需要记住的网站数目。爬虫程序必须记住所有它曾经进行过信息采集的URL,以及队列中存放的即将进行采集的URL。这些URL必须易于存取,因为采集到的每个页面都含有新的链接,需要将这些新的链接添加到采集队列中。爬虫程序中的队列不能含有重复的URL或已经采集过的页面的URL,每一个新的URL必须与队列中的所有元素进行检查,并与已经采集过的所有URL进行检查。这个用于查找的数据结构需要存放在RAM中,否则,计算机采集页面的速度将严重受到限制。将信息采集的任务分摊给多台计算机,可以降低存储和检查的开销。

使用多台计算机用于信息采集的第三个原因是,可以使用大量的计算资源(computing resources),包括用于分析的CPU资源,用于页面采集的网络带宽。对网络中的大部分页面进行采集,仅使用单独的一台计算机需要处理大量的工作。

分布式网络爬虫更像单独一台计算机上的爬虫程序,但它拥有多个URL队列,而不是一个。分布式网络爬虫使用散列函数将URL分配给进行信息采集的计算机。当一个爬虫程序看到了一个新的URL,就对该地址计算它的散列值,以确定该地址由哪台进行信息采集的计算机负责。将这些URL分批进行汇总,然后周期性地发送,以减少每次发送一个URL的网络开销。

散列函数只需要对URL中的主机部分进行计算。这样,可以将某一主机下的所有URL分配给单独的一个爬虫程序。虽然有些主机与其他的主机相比含有更多的页面,这可能会增加爬虫程序之间URL分配的不平衡性,但礼貌规则要求在同一主机上的不同URL抓取之间需要时间延迟。对于同一主机上的所有URL使用同一台计算机进行信息采集,会更加易于支持礼貌规则中需要的时间延迟。另外,我们期望 cuowu.com 上的网站有大量的链接指向 cuowu.com 上的其他页面。通过将 cuowu.com 分配给单独的一个爬虫程序,可以减少在多台用于信息采集的计算机之间交换URL的数量。


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码