增量式爬虫
目的
增量式爬虫:在上一次爬取的基础上继续爬取数据,
通过增量式爬虫,我们可以继续爬取因故未完全爬完的数据,或网站更新的数据.
去重
那么如何判断我们是否爬过某条数据是关键,显然,每次爬取判断该数据是否存在是不可取的 , 所以这里我们利用了Redis数据库集合自动去重的功能.向Redis 库中的集合里放:
- 返回0,就是已经存过
- 返回1,说明是新数据
ps: Redis数据库性能极高 – 能读的速度是110000次/s,写的速度是81000次/s 。
既然要在我们的代码中用Redis,先连接:
from redis import Redis
class BookSpider(CrawlSpider):
conn = Redis('localhost', 6379)
...
def parse_item(self, response):
pass
然后是尝试将我们爬取到的数据插入Redis的集合
-
url去重:
from redis import Redis class BookSpider(CrawlSpider): conn = Redis('localhost', 6379) ... def parse(self, response): ... ret = self.conn.sadd('book_link02', detail_url) if ret: pass #发出请求的逻辑 else: pass
-
数据指纹去重:
我们不可能将一条较长的数据存入Redis,但是可以用为数据生成数据指纹,验证数据是否以存入,这里以MD5消息摘 要算法为例:
import hashlib
code = hashlib.md5(data_name.encode('utf-8')).hexdigest()
这样数据data_name 就有了唯一的数据指纹code
def parse(self, response):
...
code = hashlib.md5(data_name.encode('utf-8')).hexdigest()
ret = self.conn.sadd('book_link02', code)
if ret:
pass
#发出请求的逻辑
else:
pass