Scrapy爬虫框架实现增量式(数据更新)数据抓取 借助redis的set类型

鳄鱼君Ba

发表文章数:514

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Scrapy爬虫框架实现增量式(数据更新)数据抓取 借助redis的set类型

借助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

未经允许不得转载:作者:鳄鱼君Ba, 转载或复制请以 超链接形式 并注明出处 鳄鱼君Ba
原文地址:《Scrapy爬虫框架实现增量式(数据更新)数据抓取 借助redis的set类型》 发布于2020-05-10

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

5 + 5 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册