scrapy分布式抓取基本设置
scrapy本身并不是一个为分布式爬取而设计的框架,但第三方库scrapy-redis为其扩展了分布式抓取的功能,在分布式爬虫框架中,需要使用某种通信机制协调各个爬虫工作
(1)当前的爬取任务,下载+提取数据(分配任务)
(2)当前爬取任务是否已经被其他爬虫执行过(任务去重)
(3)如何存储怕去到的数据(数据存储)
scrapy-redis利用Redis数据库作为多个爬虫的数据共享
下载源码:
$git clone https://github.com/rolando/scrapy-redis
分布式需要解决两个基本问题,
1分配爬取任务,分配每个爬虫不同任务;2汇总爬取数据,将所有数据汇总
scrapy-redis为多个爬虫分配爬取任务方式是:让所有的爬虫共享一个存在于Redis数据库中的请求队列(替代了每个爬虫独立的请求队列),每个爬虫从请求队列中获取请求,下载并解析页面,将解析出来的新请求加入到请求队列,每个爬虫既是生产者又是消费者。重新实现了一下的组件(1)基于Redis的请求队列(2)基于Redis的请求去重过滤器(3)基于以上两个组件的调度器。
搭建环境
首先搭建scrapy-redis分布式爬虫环境,假设三台A(116.29.00.000)、B、C
三台安装scrapy和scrapy-redis
pip install scrapy
pip install scrapy-redis
选择其中A(116.29.00.000)为搭建所有爬虫使用的Redis数据库
1.安装redis-server
sudo apt-get install redis-server
2.在Redis配置文件中修改服务器的绑定地址,以确保数据库可被所有爬虫访问到
sudo vi /etc/redis/redis.conf
....
#bin 127.0.0.1
bin 0.0.0.0
3.启动Redis服务器
sudo service redis-server restart
测试能否访问到 :redis-cli -h 166.29.00.00 ping
复制一份项目代码
在配置文件settings.py中添加scrapy-redis的相关配置
REDIS_URL = 'redis://116.35.00.00:6379' #指定爬虫需要的使用的Redis数据库
SCHEDULER= 'scrapy_redis.scheduler.Scheduler' #使用scrapy_redis的调度器替代原有的调度器
DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter’ #使用scrapy_redis的RFPDupeFilter作为去重过滤器
ITEM_PIPELINES={
'scrapy_redis.pipilines.RedisPipeline':300
}#启用scrapy_redis的RedisPipeline将爬取到的数据汇总到Redis数据库
将单机版spider改为分布式spider
from scrapy_redis.spider import RedisSpider class NameSpider(RedisSpider): #将start_urls注释
#start_urls=['']
运行之后,由于Redis起始的列表和请求队列都是空的,此时需要在A中设置起爬点,
redis-cli -h 116.29.00.000
lpush name:start_urls 'http://........'
scrapy分布式抓取基本设置的更多相关文章
- WebMagic实现分布式抓取以及断点抓取
访问我的博客 前言 从去年到今年,笔者主要负责的是与合作方的内容对接,新增的合作商不是很多的情况下,在我自从去年引入了 WebMagic 这个爬虫框架之后,基本很少需要去关注维护爬虫,做的最多的是新接 ...
- python爬虫学习:分布式抓取
前面的文章都是基于在单机操作,正常情况下,一台机器无论配置多么高,线程开得再多,也总会有一个上限,或者说成本过于巨大.因此,本文将提及分布式的爬虫,让爬虫的效率提高得更快. 构建分布式爬虫首先需要有多 ...
- 利用python scrapy 框架抓取豆瓣小组数据
因为最近在找房子在豆瓣小组-上海租房上找,发现搜索困难,于是想利用爬虫将数据抓取. 顺便熟悉一下Python. 这边有scrapy 入门教程出处:http://www.cnblogs.com/txw1 ...
- python分布式抓取网页
呵呵,前两节好像和python没多大关系..这节完全是贴代码, 这是我第一次写python,很多地方比较乱,主要就看看逻辑流程吧. 对于编码格式确实搞得我头大..取下来页面不知道是什么编码,所以先找c ...
- 用scrapy数据抓取实践
本文来自网易云社区 作者:沈高峰 数据分析中需要用到的不少数据都是需要进行抓取的,并且需要对抓取的数据进行解析之后存入数据库.scrapy是一个强大的爬虫框架,本文简单介绍下使用scrapy进行垂直抓 ...
- scrapy递归抓取网页数据
scrapy spider的parse方法能够返回两种值:BaseItem.或者Request.通过Request能够实现递归抓取. 假设要抓取的数据在当前页,能够直接解析返回item(代码中带**凝 ...
- scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库
利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...
- scrapy框架抓取表情包/(python爬虫学习)
抓取网址:https://www.doutula.com/photo/list/?page=1 1.创建爬虫项目:scrapy startproject biaoqingbaoSpider 2.创建爬 ...
- Scrapy 分布式爬取
由于受到计算机能力和网络带宽的限制,单台计算机运行的爬虫咋爬取数据量较大时,需要耗费很长时间.分布式爬取的思想是“人多力量大”,在网络中的多台计算机同时运行程序,公童完成一个大型爬取任务, Scrap ...
随机推荐
- Java实现 LeetCode 391 完美矩形
391. 完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 ...
- Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
输入一个百分制的成绩t后,按下式输出它的等级.等级为:90100为A,8089为B,7079为C,6069为D,0~59为E. 样例输入 98 样例输出 A import java.util.Scan ...
- mac下使用VMVARE安装win10虚拟机的一些坑
最近Mac上安装windows踩到了几个坑: 坑一:启动虚拟机后,提示找不到CD-ROM中找不到对应的ISO文件 硬盘格式请选择 在虚拟机->设置中选择启动磁盘为CD_ROM,然后重新启动. 坑 ...
- repo 导出本地 git tag 给他人
背景 使用 repo 管理了多个 git 仓库,有时需要将本地仓库的tag同步给其他人,但又不能直接推到远程(例如权限问题). 实际场景举例 本地复现了一个问题,需要让其他人回退到相同环境来排查. 本 ...
- JAVA第三次blog总结
JAVA第三次blog总结 0.前言 这是我们在博客园上第三次写博客,也是本学期最后一次的JAVA学习大总结.现在我们的JAVA已经接近尾声了,对于编程思想和方法的改变依旧是难点,但是经过这一段时间的 ...
- 别让HR再质问我:我费劲招的人,你用缓存问废了,不能简单点?
概念 缓存穿透 在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的活动. 缓存击穿 在高并发下,对一个特定的值进行查询,但是这个时候缓存正好 ...
- Redis学习笔记(十七) 集群(上)
Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移操作. 一个Redis集群通常由多个节点组成,在刚开始的时候每个节点都是相互独立的,他们处于一个只包含 ...
- Netty 源码解析: Netty 的 ChannelPipeline
ChannelPipeline和Inbound.Outbound 我想很多读者应该或多或少都有 Netty 中 pipeline 的概念.前面我们说了,使用 Netty 的时候,我们通 ...
- public、potected 、private继承下的子类对父类成员的访问情况
#include<iostream> #include<string> using namespace std; class parent{ protected: int m_ ...
- Vue项目实战之改动饿了吗购物小球动画
html:没有写v-on: afterEnter函数了,因为执行不到,原因是enter的done: <div class="ball-container"><tr ...