我们今天来说一个增量式爬虫
相信有很多的同学不太理解为什么要用增量式爬虫 增量式爬虫有什么样的作用 今天我就来为大家絮叨絮叨
增量式爬虫的意义是为了精准的拿到你想要的数据,好比说我们现在需要爬取某某网站,它的数据呢是实时更新的,我能只想要没有爬取过的数据怎么办呢,我们需要第3方库来帮助我们,我个人用的是redis数据库,我们可以对url进行比对,也可以对数据进行比对,这个根据需求来定制。
首先创建scrapy框架:
scrapy startproject ***
cd ***
scrapy genspider *** baidu.com
这样我们的scrapy框架就创建完了,我们现在步入正轨,这个例子是以字段内容为比较对象的小例子
import scrapy
from ..items import LxhItem
from redis import Redis
import hashlib
class XhSpider(scrapy.Spider):
name = 'xh'
# allowed_domains = ['baidu.com']
start_urls = ['http://xiaohua.zol.com.cn/zhengren/'] #定义要爬取的url
conn = Redis() #实例化redis
def parse(self, response):
li_list = response.xpath('//li[@class="article-summary"]')
for li in li_list:
title = li.xpath('./span[2]/a/text()').extract_first() #爬取的字段
content = li.xpath('./div[2]/text()').extract_first() #爬取的字段
fp = hashlib.md5(content.encode('utf-8')).hexdigest() #加工为数据指纹
ret = self.conn.sadd('fp', fp) #存入redis数据库
if ret: #进行比较
print('正在爬取数据!!!!!!!!!!!!11')
yield LxhItem(title=title, content=content) #如果没有爬取此条信息就存入mongdb库中
else:
print('数据存在, 跳过@@@@@@@@@@@')
continue #如果爬取此条信息就跳过本次循环
这个例子是以个别的url为比较对象的小例子
import scrapy
from redis import Redis
from ..items import ZlsItem
class ZlSpider(scrapy.Spider):
name = 'zl'
# allowed_domains = ['baidu.com']
start_urls = ['https://www.4567tv.tv/frim/index9.html'] #定义要爬取的url
conn = Redis()
def detail_parse(self, response):
title = response.xpath('/html/body/div[1]/div/div/div/div[2]/h1/text()').extract_first()
yield ZlsItem(title=title)
def parse(self, response):
durl = response.xpath('//div[@class="stui-vodlist__box"]/a/@href').extract()
for url in durl:
ret = self.conn.sadd('mv', url)
if ret: #判断是否有这条信息
print('有数据更新, 正在爬取!!!!!!')
yield scrapy.Request(url='https://www.4567tv.tv'+url, callback=self.detail_parse) #回调
else:
print('爬过来, pass掉')
continue
如果觉得对你有帮助,可以私信我,我们可以交流。
来源:CSDN
作者:许先生'
链接:https://blog.csdn.net/weixin_45499040/article/details/103863479