网站爬虫
Last updated
Last updated
在的那一章,我们提到,互联网世界中的无数网页就构成了一张图,它们之间的关系便是超链接。
那么如何无遗漏的抓取一个网站?我们可以使用图的知识来解决它。
图的遍历分两种,广度优先与深度优先。
广度优先是指当走到图中的一个节点时,分别获取这个节点直接连接的所有未曾走过的节点,并把它们推送进队列里,然后从队列取出新的节点重复这一行为,从而达到遍历目的。
深度优先是指当走到图中的一个节点时,将此节点入栈,紧接着走从此节点获取到的第一个节点,接着入栈。当走到一个直接连接的节点中不存在没有走过的节点的节点,就退栈。接着从栈顶节点继续这一步骤。
当目标网站支持高并发,并且对短时间内大量的访问没有做出反爬机制时,我们可以考虑使用广度优先。利用现代计算机多线程的工作能力,达到快速抓取完目标的目的。当然,此时我们的广度优先使用的队列应该是线程安全的。
当目标网站非常弱鸡几十并发都扛不住,或者有着对短时间同一IP大量访问进行反爬保护的情况时,可以考虑深度优先。深度优先算法一次只抓一个页面,抓取频率不高。
如果你非要用广度优先,一次只抓一个页面,也不是不可以。在此我们只是为了将图的知识代入实际的爬虫问题,提供一个可行的思路罢了。