简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~

首先介绍一下这个标题吧~

1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待当前URL抓取完毕之后在进行下一个URL的抓取,抓取效率可以提高很多。

2. Scrapy-redis:虽然Scrapy框架是异步加多线程的,但是我们只能在一台主机上运行,爬取效率还是有限的,Scrapy-redis库为我们提供了Scrapy分布式的队列,调度器,去重等等功能,有了它,我们就可以将多台主机组合起来,共同完成一个爬取任务,抓取的效率又提高了。

3. Scrapyd:分布式爬虫完成之后,接下来就是代码部署,如果我们有很多主机,那就要逐个登录服务器进行部署,万一代码有所改动..........可以想象,这个过程是多么繁琐。Scrapyd是专门用来进行分布式部署的工具,它提供HTTP接口来帮助我们部署,启动,停止,删除爬虫程序,利用它我们可以很方便的完成Scrapy爬虫项目的部署。

4. Gerapy:是一个基于Scrapyd,Scrapyd API,Django,Vue.js搭建的分布式爬虫管理框架。简单点说,就是用上述的Scrapyd工具是在命令行进行操作,而Gerapy将命令行和图形界面进行了对接,我们只需要点击按钮就可完成部署,启动,停止,删除的操作。

1. 创建Scrapy项目:(之前的博客有提到过

项目的结构如下:(这个项目里包含了多个spider,接下来,就以我圈出来的为例讲解)

因为我这个需要用到固定的代理,在这个讲一下代理如何使用:

代理在middlewares.py这个模块中的process_request方法中进行配置(如果想知道为什么在这里配置,可以去google一下scrapy框架爬虫的整体结构流程),如下:

然后在settings.py中指定具体的代理是什么:如 PROXY_URL='http://10.10.10.10:8080'

如果要设置动态代理,参考这里:https://github.com/Damon-zln/ProxyPool

2. Scrapy-redis分布式配置:

1. 首先,确认Scrapy-redis库已经安装~

未安装,可以 pip install scrapy-redis 进行安装。

2. 搭建Redis服务器,如果未安装redis数据库的,请自行google~

Redis安装完成后,就可以远程连接了,如果不能,可能是服务器上没有开放端口(redis默认端口6379)

记录服务器的IP,端口(默认是6379),密码为foobared,供后面分布式爬虫使用。

3. 配置Scrapy-redis(只需要修改settings.py文件即可)

将调度器的类和去重的类替换为Scrapy-redis提供的类,在settings.py中配置如下:

SCHEDULER = 'scrapy_redis.scheduler.Scheduler'

    DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'

Redis连接配置:

REDIS_URL = 'redis://[:password]@host:port/db'

其他的都使用默认配置(如:调度对列,持久化,重爬,管道)

5. 配置存储目标:

搭建一个MongoDB服务,将多台主机的数据都存在同一个MongoDB数据库中

配置如下:

MONGO_URI =  'host'

    MONGO_DB = 'webscrape' 

所有配置截图如下:

3. Scrapyd的安装:

1. 安装:pip install scrapyd

2. 配置:安装完毕后,需要新建一个配置文件/etc/scrapyd/scrapyd.conf,scrapyd在运行时会读取此配置文件。

在Scrapyd1.2版本后,不会自动创建该文件,需要我们自行添加。

首先,执行如下命令新建文件:

  sudo mkdir /etc/scrapyd

    sudo vi /etc/scrapyd/scrapyd.conf

接着写入如下内容:

[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root [services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

配置文件内容参见官方文档:https://scrapyd.readthedocs.io/en/stable/config.html#example-configuration-file

这里的配置文件有所修改:max_proc_per_cpu官方默认是4,即一台主机每个CPU最多运行4个Scrapy任务,在此提高为10,另外,bind_address,默认为本地127.0.0.1,在此修改为0.0.0.0,这样外网可以访问。

3. 后台运行scrapyd:

scrapyd > /dev/null &

运行之后,便可在浏览器的6800端口访问WEB UI了,如下:

4. Gerapy分布式管理:

1. 安装:pip install gerapy

2. 使用说明:

利用gerapy命令创建一个项目:

gerapy init

在当前目录下生成一个gerapy文件夹,进入gerapy文件夹,会发现一个空的projects文件夹,后面后用到。

初始化:

gerapy migrate

这样会生成一个SQLite数据库,用于保存各个主机的配置信息等。

启动Gerapy服务:

gerapy runserver host:port (默认是端口8000)

这样,我们就可以通过http://host:8000进入Gerapy管理页面。

在主机管理中添加scrapyd运行的地址和端口,如下:

在projects文件夹中,放入你的Scrapy项目:

可以点击上图中的编辑,在线编辑项目,如果项目没有问题,可以点击部署进行打包和部署,在部署之前要打包项目(打包成一个egg文件),可以部署到多台主机。

部署完毕后,可以回到主机管理页面进行任务调度。点击调度即可进入任务管理页面,可以查看当前主机所有任务的运行状态:

通过点击运行,停止按钮来实现任务的启动和停止,同时可以展开任务条目查看日志详情。

下面是抓取的数据存入MongoDB数据库:

至此,分布式爬虫就完成了,可能说的有点简略,如有不理解的,自行google~

Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合的更多相关文章

  1. 基于redis的简易分布式爬虫框架

    代码地址如下:http://www.demodashi.com/demo/13338.html 开发环境 Python 3.6 Requests Redis 3.2.100 Pycharm(非必需,但 ...

  2. scrapyd部署、使用Gerapy 分布式爬虫管理框架

    Scrapyd部署爬虫项目 GitHub:https://github.com/scrapy/scrapyd API 文档:http://scrapyd.readthedocs.io/en/stabl ...

  3. 跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

    背景 用 Python 做过爬虫的小伙伴可能接触过 Scrapy,GitHub:https://github.com/scrapy/scrapy.Scrapy 的确是一个非常强大的爬虫框架,爬取效率高 ...

  4. 分布式爬虫框架XXL-CRAWLER

    <分布式爬虫框架XXL-CRAWLER> 一.简介 1.1 概述 XXL-CRAWLER 是一个分布式爬虫框架.一行代码开发一个分布式爬虫,拥有"多线程.异步.IP动态代理.分布 ...

  5. Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs)

    Cola:一个分布式爬虫框架 - 系统架构 - Python4cn(news, jobs) Cola:一个分布式爬虫框架 发布时间:2013-06-17 14:58:27, 关注:+2034, 赞美: ...

  6. python3下scrapy爬虫(第十三卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之配置)

    之前我们的爬虫都是单机爬取,也是单机维护REQUEST队列, 看一下单机的流程图: 一台主机控制一个队列,现在我要把它放在多机执行,会产生一个事情就是做重复的爬取,毫无意义,所以分布式爬虫的第一个难点 ...

  7. scrapy系列(一)——Python 爬虫框架 Scrapy1.2 Windows 安装教程

    scrapy作为一个成熟的爬虫框架,网上有大量的相关教程供大家选择,尤其是关于其的安装步骤更是丰富的很.在这里我想记录下自己的相关经验,希望能给大家带来点帮助. 在scrapy0.24版之前,安装sc ...

  8. Python 用Redis简单实现分布式爬虫

    Redis通常被认为是一种持久化的存储器关键字-值型存储,可以用于几台机子之间的数据共享平台. 连接数据库 注意:假设现有几台在同一局域网内的机器分别为Master和几个Slaver Master连接 ...

  9. python3下scrapy爬虫(第十四卷:scrapy+scrapy_redis+scrapyd打造分布式爬虫之执行)

    现在我们现在一个分机上引入一个SCRAPY的爬虫项目,要求数据存储在MONGODB中 现在我们需要在SETTING.PY设置我们的爬虫文件 再添加PIPELINE 注释掉的原因是爬虫执行完后,和本地存 ...

随机推荐

  1. [题解] P2513 [HAOI2009]逆序对数列

    动态规划,卡常数 题目地址 设\(F[X][Y]\)代表长度为\(X\)的序列,存在\(Y\)组逆序对的方案数量. 考虑\(F[X][i]\)向\(F[X+1][i]\)转移: 把数字\(X+1\)添 ...

  2. 逆卷积的详细解释ConvTranspose2d(fractionally-strided convolutions)

    1.首先先定义进行卷积的参数: 输入特征图为高宽一样的Hin*Hin大小的x 卷积核大小kernel_size 步长stride padding填充数(填充0) 输出特征图为Hout*Hout大小的y ...

  3. Characterization of Dynkin diagrams

    Nowadays, I am reading D.J.Benson's nice book, volume I of Representations and cohomology. I found i ...

  4. Android Studio自定义注释模板

    一.自定义新建文件时生成的注释 setting->Editor->File and Code Templates->Includes->File Header,在这里输入自定义 ...

  5. Docker 核心技术之Dockerfile

    Dockerfile 简介 什么是Dockerfile Dockerfile其实就是根据特定的语法格式撰写出来的一个普通的文本文件 利用docker build命令依次执行在Dockerfile中定义 ...

  6. 使用FindBugs寻找bug,代码分析

    安装就不说了,网上很多. 一些常见的错误信息 Bad practice 代码中的一些坏习惯 Class names should start with an upper case letter 主要包 ...

  7. html实体命名

    本文转自:http://www.cnblogs.com/kiter/archive/2011/08/05/2128309.html (转发备用) 1.特色的 © © © 版权标志 |   | 竖线,常 ...

  8. 使用excel整理脚本

    的时候需要通过excel数据初始化脚本,当数据过多的时候,脚本也就很多.这里记录一个平时用excel初始化脚本的小技巧. excel中在空单元格中写如下值: ="INSERT INTO db ...

  9. Android数据库优化

    1.索引 简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1). 优点大大加快了数据库检索的速度,包 ...

  10. Tenka1 Programmer Contest 2019

    C:即要使前一部分为白色后一部分为黑色,枚举分割点前缀和计算答案取min即可. #include<bits/stdc++.h> using namespace std; #define l ...