借助redis的set实现增量式爬虫。增量式意思就是监测网站数据更新情况,爬取最新更新出来的数据,核心就是去重。这里我们只通过redis的set集合来实现。
—-对爬取数据的url进行监测,使用一个记录表存储爬取过的数据的url,但凡记录表中存有的url,说明url对应数据已经爬取过了,否则表示没有爬取过为新数据。
redis的set集合充当记录表,自带去重功能。
插入成功为会返回1,失败输入的数据已经存在,返回0。
以:https://www.4567kan.com/frim/index1.html 这个网站作为演示,主要学习如何实现增量式,数据暂且先不考虑。这里通过CrawlSpider进行翻页,详情页数据使用parse_detail方法来处理。把详情页的url存放到记录表,也就是redis的set集合中去:
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redis import StrictRedis
class MeiziSpider(CrawlSpider):
name = 'meizi'
start_urls = ['https://www.4567kan.com/frim/index1.html']
# 创建reids链接对象
client=StrictRedis(host='127.0.0.1',port=6379)
rules = (
# 寻找翻页的url地址,我们不需要拼接url,需要继续跟进
Rule(LinkExtractor(allow=r'/frim/index1-\d+\.html'),callback='parse_item', follow=True),
)
# 解析详情页url 电影标题
def parse_item(self, response):
ul_list=response.xpath('//ul[@class="stui-vodlist clearfix"]/li')
item={}
for li in ul_list:
item['title']=li.xpath('./div/a/@title').extract_first()
item['href']="https://www.4567kan.com/"+li.xpath('./div/a/@href').extract_first()
excu=self.client.sadd('move_url',item['href'])
if excu==1:
print('该条数据没有爬取过,正在爬取....')
yield scrapy.Request(item['href'],callback=self.parse_detail,meta={"item":item})
else:
print('该条数据已经爬取过了...')
def parse_detail(self,response):
item=response.meta['item']
p_list=response.xpath('//div[@class="stui-content__detail"]')
for p in p_list:
item['move_type']="".join(p.xpath('./p[1]//text()').extract())
item['content']="".join(p.xpath('./p[5]//text()').extract())
print (item)
如果想将item也存储到reids中,可以在parse_detail方法中yield item,然后开启管道
class Myspider1Pipeline:
def process_item(self, item, spider):
client=spider.client # 获取redis的链接对象
client.lpush('moveData',item) # 将item添加到list中
return item
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!