一 增量式爬虫

什么时候使用增量式爬虫:

增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据。如一些电影网站会实时更新最近热门的电影。那么,当我们在爬虫的过程中遇到这些情况时,我们是不是应该定期的更新程序以爬取到更新的新数据?那么,增量式爬虫就可以帮助我们来实现

二 增量式爬虫
概念

通过爬虫程序检测某网站数据更新的情况,这样就能爬取到该网站更新出来的数据

如何进行增量式爬取工作:
  • 在发送请求之前判断这个URL之前是不是爬取过
  • 在解析内容之后判断该内容之前是否爬取过
  • 在写入存储介质时判断内容是不是在该介质中
增量式的核心是 去重
去重的方法
  • 将爬取过程中产生的URL进行存储,存入到redis中的set中,当下次再爬取的时候,对在存储的URL中的set中进行判断,如果URL存在则不发起请求,否则 就发起请求
  • 对爬取到的网站内容进行唯一的标识,然后将该唯一标识存储到redis的set中,当下次再爬取数据的时候,在进行持久化存储之前,要判断该数据的唯一标识在不在redis中的set中,如果在,则不在进行存储,否则就存储该内容

三 实列

爬取4567tv网站中所有的电影详情数据

movie.py

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redis import Redis
from increment1_Pro.items import Increment1ProItem
class MovieSpider(CrawlSpider):name = 'movie'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.4567tv.tv/index.php/vod/show/id/7.html']rules = (Rule(LinkExtractor(allow=r'/index.php/vod/show/id/7/page/\d+\.html'), callback='parse_item', follow=True),)def parse_item(self, response):conn = Redis(host='127.0.0.1',port=6379)detail_url_list= response.xpath('//li[@class="col-md-6 col-sm-4 col-xs-3"]/div/a/@href').extract()for url in detail_url_list:ex = conn.sadd('movies_url',url)#等于1 的时候 说明数据还没有存储到redis中  等于0 的时候 说明redis中已经存在该数据if ex == 1:yield scrapy.Request(url=url,callback=self.parse_detail)else:print("网站中无数据更新,没有可爬取得数据!!!")def parse_detail(self,response):item = Increment1ProItem()item['name']=response.xpath('/html/body/div[1]/div/div/div/div[2]/h1/text()').extract_first()item['actor']=response.xpath('/html/body/div[1]/div/div/div/div[2]/p[3]/a/text()').extract_first()yield item# item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()# return item

管道文件

from redis import Redis
class Increment1ProPipeline(object):conn = Nonedef open_spider(self,spider):self.conn = Redis(host='127.0.0.1',port=6379)def process_item(self, item, spider):print('有新的数据正在入库')self.conn.lpush('movie_data',item)return item
爬取糗事百科中的内容和作者

qiubai.py

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redis import Redis
from increment2_Pro.items import Increment2ProItem
import hashlib
class QiubaiSpider(CrawlSpider):name = 'qiubai'# allowed_domains = ['www.xxx.com']start_urls = ['https://www.qiushibaike.com/text/']rules = (Rule(LinkExtractor(allow=r'/text/page/\d+/'), callback='parse_item', follow=True),)def parse_item(self, response):div_list = response.xpath('//div[@class="article block untagged mb15 typs_hot"]')conn = Redis(host='127.0.0.1',port=6379)for div in div_list:item = Increment2ProItem()item['content'] = div.xpath('.//div[@class="content"]/span//text()').extract()item['content'] = ''.join(item['content'])item['author'] = div.xpath('./div/a[2]/h2/text() | ./div[1]/span[2]/h2/text()').extract_first()source = item['author'] + item['content']sourse = item['content']+item['author']#自己定制一种形式得数据指纹hashvalue = hashlib.sha256(sourse.encode()).hexdigest()ex = conn.sadd('qiubai_hash',hashvalue)if ex == 1:yield itemelse:print('没有可更新的数据可爬取')# item = {}#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()# return item

管道文件

from redis import Redis
class Increment2ProPipeline(object):conn = Nonedef open_spider(self,spider):self.conn = Redis(host='127.0.0.1',port=6379)def process_item(self, item, spider):dic = {'author':item['author'],'content':item['content']}self.conn.lpush('qiubaiData',dic)print('爬取到一条数据,正在入库......')return item

python爬虫Scrapy框架之增量式爬虫相关推荐

  1. dataObject可以去重吗java_python爬虫scrapy框架之增量式爬虫的示例代码

    scrapy框架之增量式爬虫 一 .增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的 ...

  2. python增量爬虫_python爬虫Scrapy框架之增量式爬虫

    一 增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的电影.那么,当我们在爬虫的过程中 ...

  3. scrapy框架之增量式爬虫

    scrapy框架之增量式爬虫 一 .增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的 ...

  4. python的scrapy框架的安装_Python爬虫基础(四)--Scrapy框架的安装及介绍

    Scrapy框架的介绍 安装: pip3 install Scrapy 安装测试: cmd命令行界面,输入:scrapy -h 框架安装完成: scrapy框架: 分为五个模块+两个中间件(5+2结构 ...

  5. python之Scrapy框架的第一个爬虫

    执行: D:\pycodes\python123demo>scrapy crawl demo scrapy crawl demo 学习笔记: 代码: D:\pycodes>scrapy s ...

  6. python爬虫--scrapy框架的学习和使用(七)⭐---第二部分

    文章目录 九.CrawlSpider⭐⭐⭐ 实战项目 问题总结 十.分布式爬虫 十一.增量式爬虫 总结 九.CrawlSpider⭐⭐⭐ 是一个类,基于Spider的子类. 子类继承父类所有的功能,并 ...

  7. Crawler之Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息

    Crawler之Scrapy:Python实现scrapy框架爬虫两个网址下载网页内容信息 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 import scrapy class Dmoz ...

  8. python 爬虫框架_Python网络爬虫-scrapy框架的使用

    1. Scrapy 1.1 Scrapy框架的安装 Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted .lxml和pyOpenSSL.在不同的平台环境下,它所依赖 ...

  9. python cookie池_Python爬虫scrapy框架Cookie池(微博Cookie池)的使用

    下载代码Cookie池(这里主要是微博登录,也可以自己配置置其他的站点网址) 下载代码GitHub:https://github.com/Python3WebSpider/CookiesPool 下载 ...

最新文章

  1. Matlab读取avi视频并播放
  2. 【PM模块】故障维护简介
  3. 深入sql server中的事务
  4. mybatis15 mapper方式 代码
  5. Scrapy-redis 源码分析 及 框架使用
  6. mysql分库分表面试_【53期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?...
  7. 继安卓市场下架后 探探App也在苹果商店下架
  8. 学习笔记_vnpy实战培训day02
  9. C/C++链接过程相关
  10. 图片版坦克大战源代码之坦克类(二)
  11. BZOJ4170 极光
  12. 重装显卡驱动,解决NVIDIA-SMI has failed问题
  13. php 分页查询,php实现分页查询的方法
  14. 写个鸭子类方法java_小黄鸭系列java基础知识 | Java基本语法
  15. 尚硅谷JDBC学习笔记
  16. 用shader做一个柿子颜色的过场动画
  17. 实战虚拟化存储设计之LUN Sizing
  18. 【ValueError: could not convert string to float: ‘young‘】python利用pandas对string类型的数据序列化
  19. word指定页插入页码
  20. DOM基础详细 包含多个案例

热门文章

  1. 2014.12.10 OC基础复习
  2. Boost 库中的实用工具类使用入门
  3. python调用接口实例化_python 类静态方法实例化另一个类对象的问题?
  4. PLSQL中Database怎么填
  5. Winsock Error Codes
  6. SY-SUBRC 的含义
  7. 对不起,亲爱的,我将离开你
  8. 看图说话:你不了解的OA与SAP集成
  9. mysql排序分页乱的_Mysql 排序分页混乱
  10. idea创建包怎么让包分层_干货 | 通勤包怎么选?我推荐这6只