python爬虫实时更新数据_爬虫的增量式抓取和数据更新

一些想法

页面爬的多了,量上去了之后,就会遇到其他的问题,其实不管做什么技术量大了都会有问题。一般情况下,我认为解决"大量"问题的思路有两个:一种是着力于优化系统的能力,让原本只能一分钟处理100条的系统提升到一分钟1000条之类的,在我看来并行、分布式、集群都属于这个范畴,这种思路下,系统处理的内容没有变化只是单纯的处理速度变快了;另一种是着力于提高系统的工作效率, 比如说降低某算法的复杂度。

爬虫领域的增量式爬取属于后者,每种网站都有每种网站的特点。比如说小说连载网站、新闻或者知乎首页,这里拿知乎时间线举例,我基本每天醒来和睡觉前都会刷一波知乎,从头开始看直到看到上次载入的地方,假设我要抓取知乎的数据并保存到本地,不难发现最好的选择其实是每次只抓取上次没读过的新内容,抓评论也是一样,最优的选择是每次只抓取在上次抓取之后出现的新评论,然后再进行保存。有的时候,还有另外一种情况,就是原本存在的网页内容更新了,比如说有人在知乎上修改了他的回答。这时候,我们的爬虫就需要有分辨这些区别变化的能力。但这几个都是很简单的例子,实际情况会复杂很多。

不管是产生新页面,还是原本的页面更新,这种变化都被称为增量, 而爬取过程则被称为增量爬取。那如何进行增量式的爬取工作呢?回想一下爬虫的工作流程:

发送URL请求 ----- 获得响应 ----- 解析内容 ----- 存储内容

我们可以从几种思路入手:

在发送请求之前判断这个URL是不是之前爬取过

在解析内容后判断这部分内容是不是之前爬取过

写入存储介质时判断内容是不是已经在介质中存在

实现增量式爬取

不难发现,其实增量爬取的核心是去重, 至于去重的操作在哪个步骤起作用,只能说各有利弊,就像我说的,everything is tradeoff。

在我看来,前两种思路需要根据实际情况取一个(也可能都用)。第一种思路适合不断有新页面出现的网站,比如说小说的新章节,每天的最新新闻等等;第二种思路则适合页面内容会更新的网站。第三个思路是相当于是最后的一道防线。这样做可以最大程度上达到去重的目的。

去重的方法

最简单的去重方式自然是将所有访问过的URL和其对应的内容保存下来,然后过一段时间重新爬取一次并进行比较,然后决定是否需要覆盖。这显然是不实际的,因为会消耗很多资源。目前比较实际的做法就是给URL或者其内容(取决于这个网站采用哪种更新方式)上一个标识,这个标识有个比较好听的名字,叫数据指纹。

这里很容易想到的一种数据指纹就是哈希值,根据哈希函数的特性,我们可以为任意内容生成一个独一无二的定长字符串࿰

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值