15-scrapy-redis两种形式分布式爬虫
什么叫做分布式爬虫?
分布式爬虫,就是多台机器共用一个scrapy—redis程序高效爬取数据,
为啥要用分布式爬虫?
其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的url。(多台机器无法共享同一个调度器)
其二:多台机器爬取到的数据无法通过同一个管道对数据进行统一的数据持久出存储。(多台机器无法共享同一个管道)
scrapy-redis组件分布式爬虫:
scrapy-redis为我们封装好了多台机器共用的管道以及调度器,导入包调用链接即可实现分布式爬虫。
分布式实现的方式:1、基于该组件的RedisSpider类
2、基于该组件的RedisCrawlSpider类
分布式实现流程:上述两种不同方式的分布式实现流程是统一的。
1、下载scrapy-redis组件:
pip3 install scrapy-redis
2、导包:
from scrapy_redis.spiders import RedisCrawlSpider
3、修改爬虫文件的代码
1)将当前爬虫类的父类修改成RedisCrawlSpider
2)将start_urls删除
3)添加一个新属性redis_key = "ts":可以被共享调度器中的队列名称
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider class MoviesSpider(RedisCrawlSpider):#修改爬虫类的文件
name = 'Movies'
# allowed_domains = ['www.xxx.com']
# start_urls = ['https://www.4567tv.tv/frim/index1.html']
redis_key ="ts"#添加一个新属性,redis_key = "ts":可以被共享调度器中的队列名称
4、设置管道(settings.py)
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400
# 'RedisCrawlPro.pipelines.RediscrawlproPipeline': 300,
}
5、设置调度器:(settings.py) 在配置文件中进行相关配置,开启使用scrapy-redis组件中封装好的调度器
# 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True
6、指定redis服务器(settings.py)在配置文件中进行爬虫程序链接redis的配置:
REDIS_HOST = '本机IP'
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456’}
7、redis配置文件的配置:
#配置redis:
修改Redis的配置文件:redis.windows.conf
#bind 127.0.0.1
protected-mode no
8、携带配置文件启动redis服务:
redis-server ./redis.windows.conf
9、启动redis客户端 10、执行工程:scrapy runspider xxx.py 11、手动将起始url扔入调度器的队列中(redis-cli):lpush ts www.xxx.com 12、redis-cli: items:xxx#储存文件
备注终端储存数据:
scrapy crawl CrawlName -o 文件.csv
15-scrapy-redis两种形式分布式爬虫的更多相关文章
- 基于 Scrapy-redis 两种形式的分布式爬虫
基于 Scrapy-redis 两种形式的分布式爬虫 .caret, .dropup > .btn > .caret { border-top-color: #000 !important ...
- Redis两种持久化方式(RDB&AOF)
爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...
- C++:一般情况下,设计函数的形参只需要两种形式
C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...
- jquery插件的两种形式
这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...
- SQL 关于apply的两种形式cross apply 和 outer apply(转)
转载链接:http://www.cnblogs.com/shuangnet/archive/2013/04/02/2995798.html apply有两种形式: cross apply 和 oute ...
- SQL 关于apply的两种形式cross apply 和 outer apply
SQL 关于apply的两种形式cross apply 和 outer apply 例子: CREATE TABLE [dbo].[Customers]( ) COLLATE Chinese_PRC_ ...
- SQL关于apply的两种形式cross apply和outer apply(转载)
SQL 关于apply的两种形式cross apply 和 outer apply apply有两种形式: cross apply 和 outer apply 先看看语法: <lef ...
- 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编
在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...
- Controller@实现Controller的两种形式
实现Controller的两种形式 形式1:仅仅实现IController接口,自定义Controller对Request的实现.形式2:在实现IController接口以后,继承Controller ...
随机推荐
- Map随笔:有序的HashMap——LinkedHashMap
目录 Map随笔:有序的HashMap--LinkedHashMap 一,概述 二,源码结构 三,总结 Map随笔:有序的HashMap--LinkedHashMap 一,概述 LinkedHas ...
- 各种数和各种反演(所谓FFT的前置知识?)
每次问NC做多项式的题需要什么知识点. 各种数. 各种反演. 多项式全家桶. 然后我就一个一个地学知识点.然而还差好多,学到后面的前面的已经忘了(可能是我太菜吧不是谁都是NC啊) 然后发现每个知识点基 ...
- js中触发表单提交
html代码: <form action="/test/action" method="get" id="myForm"> &l ...
- MySql索引背后的数据结构及算法
本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...
- 通过jgit一次性升级fastjson版本
背景:笔者所在公司经历了三次fastjson的升级,由于集群,工程数量众多,每次升级都很麻烦.因此开发了一个java的升级工具. 功能介绍: 功能介绍:一个jar文件,通过java -jar命令,输入 ...
- gitlab runner使用docker报错(x509: certificate signed by unknown authority)定位
如果gitlab runner使用docker,docker是普通配置,配置好后,runner就可以正常执行任务了. 另外一个环节Docker配置了tls加密连接,添加runner后,runner的配 ...
- IDEA乱码Tomcat控制台乱码输出乱码报文乱码
电脑重装系统后,重新安装了最新版的IDEA 2019.2.2,出现乱码.百度了很多,慢慢的解决了乱码的问题,现记录如下.方法因人而异,不同的问题不一样的方法. 第一 修改IDEA文件编码格式 设置id ...
- 常用类-Excel-使用Aspose.Cells插件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...
- JQuery jquerysessionjs插件使用介绍
jquerysessionjs插件使用介绍 by:授客 QQ:1033553122 1. 测试环境 JQuery-3.2.1.min.j 下载地址: https://gitee.com/ishou ...
- JS基础语法---预解析
预解析:就是在解析代码之前 1. 预解析做什么事? 把变量的声明提前了----提前到当前所在的作用域的最上面 函数的声明也会被提前---提前到当前所在的作用域的最上面 举例: function ...