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分布式抓取基本设置的更多相关文章

  1. WebMagic实现分布式抓取以及断点抓取

    访问我的博客 前言 从去年到今年,笔者主要负责的是与合作方的内容对接,新增的合作商不是很多的情况下,在我自从去年引入了 WebMagic 这个爬虫框架之后,基本很少需要去关注维护爬虫,做的最多的是新接 ...

  2. python爬虫学习:分布式抓取

    前面的文章都是基于在单机操作,正常情况下,一台机器无论配置多么高,线程开得再多,也总会有一个上限,或者说成本过于巨大.因此,本文将提及分布式的爬虫,让爬虫的效率提高得更快. 构建分布式爬虫首先需要有多 ...

  3. 利用python scrapy 框架抓取豆瓣小组数据

    因为最近在找房子在豆瓣小组-上海租房上找,发现搜索困难,于是想利用爬虫将数据抓取. 顺便熟悉一下Python. 这边有scrapy 入门教程出处:http://www.cnblogs.com/txw1 ...

  4. python分布式抓取网页

    呵呵,前两节好像和python没多大关系..这节完全是贴代码, 这是我第一次写python,很多地方比较乱,主要就看看逻辑流程吧. 对于编码格式确实搞得我头大..取下来页面不知道是什么编码,所以先找c ...

  5. 用scrapy数据抓取实践

    本文来自网易云社区 作者:沈高峰 数据分析中需要用到的不少数据都是需要进行抓取的,并且需要对抓取的数据进行解析之后存入数据库.scrapy是一个强大的爬虫框架,本文简单介绍下使用scrapy进行垂直抓 ...

  6. scrapy递归抓取网页数据

    scrapy spider的parse方法能够返回两种值:BaseItem.或者Request.通过Request能够实现递归抓取. 假设要抓取的数据在当前页,能够直接解析返回item(代码中带**凝 ...

  7. scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库

    利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...

  8. scrapy框架抓取表情包/(python爬虫学习)

    抓取网址:https://www.doutula.com/photo/list/?page=1 1.创建爬虫项目:scrapy startproject biaoqingbaoSpider 2.创建爬 ...

  9. Scrapy 分布式爬取

    由于受到计算机能力和网络带宽的限制,单台计算机运行的爬虫咋爬取数据量较大时,需要耗费很长时间.分布式爬取的思想是“人多力量大”,在网络中的多台计算机同时运行程序,公童完成一个大型爬取任务, Scrap ...

随机推荐

  1. Java实现 LeetCode 227 基本计算器 II(二)

    227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...

  2. Java实现 LeetCode 171 Excel表列序号

    171. Excel表列序号 给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> ...

  3. Java实现 蓝桥杯VIP 算法提高 字符串比较

    算法提高 字符串比较 时间限制:1.0s 内存限制:512.0MB 独立实现标准字符串库的strcmp函数,即字符串比较函数,从键盘输入两个字符串,按字典序比较大小,前者大于后者输出1,前者小于后者输 ...

  4. Java实现 LeetCode 113 路径总和 II

    113. 路径总和 II 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = ...

  5. LB服务,软LB的服务能力(下)

    [摘要] 现在常用的LB软件,主要是LVS和nginx.普通情况下,LVS主要负责四层负载均衡,nginx负责七层.当然,业界也有友商基于LVS做出了七层负载均衡.本篇主要讲一下LVS的工作模式及各种 ...

  6. JVM性能优化 (一) 初识JVM

    一.我们为什么要对JVM做优化 在本地开发环境中我们很少会遇到需要对JVM进行优化的需求,但是到了生产环境,我们可能会有下面的需求: 运行的应用"卡住了",日志不输出,程序没有反应 ...

  7. ELK扫盲及搭建

    1. ELK部署说明 1.1ELK介绍: 1.1.1 ELK是什么? ELK是三个开源软件的缩写,分别表示:ElasticSearch , Logstash, Kibana , 它们都是开源软件,EL ...

  8. 【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

    目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 源码分享 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法: 配 ...

  9. Redis的持久化设计

    Redis 持久化设计 持久化的功能:Redis是内存数据库,数据都是存储在内存中的,为了避免进程退出导致数据的永久丢失,要定期将Redis中的数据以某种形式从内存保存到硬盘,当下次Reids重启时, ...

  10. 使用vscode 开发go项目的最新姿势. go版本1.14.2

    使用了go 1.14.2. 版本, 再也不用建src, pkg, bin 目录了,   以及再也不用强制配置GOPATH了 前提条件: 必须是 go mod 项目. 在工程目录下, 执行这样的命令生成 ...