网页视频抓取器手机版(网络爬虫提取出该网页中的新一轮URL的抓取环路)

优采云 发布时间: 2021-12-23 09:42

  网页视频抓取器手机版(网络爬虫提取出该网页中的新一轮URL的抓取环路)

  一般我们要爬取一个网站的所有网址,先传递起始网址,然后通过网络爬虫提取网页中的所有网址链接,然后对每个提取的网址进行爬取。在每个网页中提取新一轮的 URL,依此类推。总体感觉是从上到下爬取网页中的链接。理论上,您可以抓取整个网站上的所有链接。但问题来了。网站 中的网页链接有循环。

  

  例如,在网站的首页,我们可以看到首页的链接,然后我们可能会在子页面中看到一个首页的链接,可能会有对应的子页面的链接页。首页。按照我们之前的逻辑,抓取每个网页中的所有链接,然后继续抓取所有链接。以首页为例。我们爬行的第一件事就是它。然后子页面里面有一个到首页的链接,子子页面也有一个到首页的链接。进行这种爬取会导致网页的重复爬取。其他的根本就没有抓取网页的机会,无法想象~~解决这个问题不难。这时候就需要用到网络爬虫中一个很重要的知识点,就是网页的去重。

  

  先介绍一个简单的思路,这也是一个常用的思路。我们将抓取到的网页放到一个列表中。以首页为例。抓取主页时,将主页放入列表中。那么当我们抓取子页面的时候,如果再次触摸首页,并且首页已经被抓取了。这时候可以跳过首页,继续爬取其他网页,避免重复爬取首页。这样在爬取整个站点的时候就不会出现循环了。路。以这个思路为出发点,将访问过的URL保存在数据库中,当获取到下一个URL时,到数据库中查看该URL是否被访问过。数据库虽然有缓存,但是在数据库中查询每个URL的时候,效率会下降很快,所以这个策略用的不多,

  

  第二种方法是将访问过的URL保存在集合中。这种方式获取URL的速度非常快,基本不用查询。但是这种方法有一个缺点。保存集合中的 URL 实际上是保存在内存中。当 URL 数据量较大(如 1 亿)时,内存压力会增加。对于小型爬虫来说,这种方法是非常可取的,但是对于大型网络爬虫来说,这种方法很难实现。

  

  第三种方式是对md5中的字符进行编码,md5编码可以将字符缩减为固定长度。一般来说,md5编码的长度在128bit左右,约等于16byte。在缩减之前,假设一个URL占用的内存大小为50字节,1字节等于2字节,相当于100字节。可以看出,经过md5编码后,节省了大量的内存空间。通过md5,可以将任意长度的URL压缩成相同长度的md5字符串,不会有重复,可以达到去重的效果。这样,在很大程度上节省了内存。scrapy框架采用的方法与md5方法有些类似。因此,正常情况下,即使 URL 的量级达到数亿,scrapy占用的内存也比set方法高。少得多。

  

  第四种方式是使用位图方法进一步压缩字符。这种方法的意思是在计算机中申请8位,即8位,每一位用0或1表示,是计算机中的最小单位。如果8位组成一个字节,一位代表一个URL,为什么一位可以确定一个URL?因为我们可以对一个 URL 执行哈希函数,然后将其映射到位。例如,假设我们有8个URL,对应8位,然后通过位上的0和1的状态,就可以表明这个URL是否存在,这种方法可以进一步压缩内存。

  

  但是位图方法有一个非常大的缺点,就是它的冲突会非常高,因为同一个hash函数很有可能将两个不同的URL或者多个不同的URL映射到一个位置。其实这个hash方法也是set方法的一个实现原理。它对 URL 执行函数计算,然后将其映射到位的位置。因此,这种方法可以大大压缩内存。简单计算一下,还是用1亿个URL来计算,相当于1亿比特。通过计算,相当于1250万字节。除以1024之后,大约是12207KB,也就是大约12MB的空间。在实际过程中,内存占用可能会大于12MB,但即便如此,相比前三种方法,这种方法又大大减少了内存占用的空间。但同时,与此方法冲突的可能性非常高,因此此方法不是很适用。那么有没有办法进一步优化位图,这是一种重内存压缩的方法,以减少冲突的可能性?答案是肯定的,是第五种方式。

  

  第五种方法是bloomfilter,改进bitmap,可以通过多个hash函数减少冲突的可能性。这样一来,一方面不仅可以减少位图方法的内存,另一方面,同时也起到了减少冲突的作用。关于bloomfilter的原理和实现,后期我一定会介绍给大家的。今天就让大家有个简单的了解。Bloomfilter适用于大型网络爬虫,尤其是数量级超大的时候。布隆过滤器方法可以事半功倍,而且往往配合分布式爬虫来达到爬取的目的。

  

  网络爬虫过程中的五种去重策略介绍,这里是第一次。如果你不明白,你应该明白。问题不大。希望对朋友的学习有所帮助。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线