实现方式:scrapy+scrapy_redis组件实现的分布式。scrapy+redis
原生的scrapy是不可以实现分布式的!!!
什么是分布式
需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一个网络资源进行联合且分布的数据爬取。
为什么scrapy不可以实现分布式
调度器不可以被共享 管道不可以被共享scrapy-reIDs组件的作用是什么
提供可以被共享的管道和调度器
分布式的实现流程
环境的安装:pip install scrapy-redis
创建工程
cd 工程
创建爬虫文件:
基于SpIDer 基于CrawlSpIDer修改爬虫文件:
导报:from scrapy_redis.spIDers import RedisCrawlSpIDer#基于crawlSpIDer爬虫文件
from scrapy_redis.spIDers import RedisSpIDer #基于SpIDer爬虫文件 将当前爬虫类的父类修改为RedisCrawlSpIDer 删除allowed_domains和start_urls 添加一个redis_key = ‘xxx’属性,表示的是调度器队列的名称、 根据常规形式编写爬虫文件后续的代码
修改settings配置文件
指定管道
ITEM_PIPElines = {
‘scrapy_redis.pipelines.RedisPipeline‘: 400
}
指定调度器
增加了一个去重容器类的配置,作用使用Redis的set集合来存储请求的指纹数据,从而实现请求去重的持久化DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
使用scrapy-redis组件自己的调度器SCHEDulER = "scrapy_redis.scheduler.Scheduler"
配置调度器是否要持久化,也就是当爬虫结束了,要不要清空Redis中请求队列和去重指纹的set。如果是True,就表示要持久化存储,就不清空数据,否则清空数据
SCHEDulER_PERSIST = True
指定redis数据库
REdis_HOST = ‘192.168.13.254‘
REdis_PORT = 6379
修改redis的配置文件redis.windows.conf
关闭默认绑定 56行:#bind 127.0.0.1 关闭保护模式 75行:protected-mode no启动redis的服务端(携带配置文件)和客户端
启动分布式的程序:
scrapy runspIDer xxx.py向调度器的队列中扔入一个起始的url
队列是存在于redis中 redis的客户端中:lpush sun www.xxx.com在redis中就可以查看爬取到的数据
增量式 概念:监测 核心技术:去重 适合使用增量式的网站: 基于深度爬取 对爬取过的页面的url进行一个记录(记录表) 基于非深度爬取 记录表:爬取过的数据对应的数据指纹 数据指纹:就是原始数据的一组唯一标识 所谓的记录表是以怎样的形式存在于哪? redis的set充当记录表 反爬机制 robots UA伪装 图片懒加载 验证码 cookie 动态加载的数据 动态变化的请求参数 Js加密 Js混淆 代理 总结以上是内存溢出为你收集整理的python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制全部内容,希望文章能够帮你解决python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)