Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合

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

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

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~

原文地址:https://www.cnblogs.com/dazhan/p/9605449.html

时间: 2024-07-30 10:05:35

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

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

之前我们的爬虫都是单机爬取,也是单机维护REQUEST队列, 看一下单机的流程图: 一台主机控制一个队列,现在我要把它放在多机执行,会产生一个事情就是做重复的爬取,毫无意义,所以分布式爬虫的第一个难点出来了,共享请求队列,看一下架构: 三台主机由一个队列控制,意味着还需要一个主机来控制队列,我们一般来用REDIS来控制队列,形成如下分布式架构 从机抓取,存储主机负责控制队列 SCRAPY_REDIS这个插件解决了SCRAPY不能做分布式爬取的问题 它内部的CONNECTION.PY作为连接MAS

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

现在我们现在一个分机上引入一个SCRAPY的爬虫项目,要求数据存储在MONGODB中 现在我们需要在SETTING.PY设置我们的爬虫文件 再添加PIPELINE 注释掉的原因是爬虫执行完后,和本地存储完毕还需要向主机进行存储会给主机造成压力 设置完这些后,在MASTER主机开启REDIS服务,将代码复制放在其它主机中,注意操作系统类型以及配置 然后分别在各个主机上进行爬取,爬取速度加大并且结果不同 setting中加入这个可以保证爬虫不会被清空 设置这个决定重新爬取时队列是否清空,一般都用FA

python 爬虫框架scrapy学习记录和整理 python爬虫框架scrapy入门文档学习

里的话并不推荐大家用python+pip安装,推荐使用Anaconda进行安装,为什么呢?因为如果你选择前者,填坑的过程可能会让你绝望,说不定会让你砸键盘.内分泌失调,所以强烈建议用Anaconda! win7(64位)Anaconda3-5.0.1-Windows-x86_64(点击下载) 一.安装Anaconda 这里的话简单介绍一下anaconda的下载,下载地址为:https://www.anaconda.com/download/ 如果官网无法打开,请移步这里:下载Anaconda P

Scrapy爬虫框架入门

一.环境搭建 Scrapy是一个比较好的爬虫框架,本次,我们学习一下,使用Scrapy框架来创建一个爬虫项目,并通过一个简单的例子演示一下. 第一步:安装依赖.首先先保证已经安装了python,pip.然后使用pip进行一下依赖的安装,顺序为: 1.wheel      2.  lxml     3.PyOpenssl      4.  Pywin32   5.scrapy 安装命令为:比如安装sheel:pip install sheel 当然,肯定没有那么容易就能安装成功了啦,由于版本不一致

学习爬虫框架scrapy时的一些收获

scrapy作为python中的一个爬虫框架,功能十分强大,内部实现了twisted的异步调用,在一定程度上提升了运行效率,并且由于scrapy爬虫有着相对固定的结构,内部封装了众多功能,因此只要逻辑清晰,初步掌握scrapy还是比较容易的.作为一个小白,刚刚接触scrapy,计划用scrapy爬取知乎上感兴趣的话题以及其热门问答,现记录一下自己在学习中的一些感悟,如果有不对的地方欢迎指正. 1. 爬取知乎第一步是模拟登录,关于模拟登陆知乎的技术文章有很多,大体思路都是先获取_xsrf以及验证码

Python3网络爬虫实战-10、爬虫框架的安装:PySpider、Scrapy

我们直接用 Requests.Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的.但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了. 利用框架我们可以不用再去关心某些功能的具体实现,只需要去关心爬取逻辑即可.有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多.所以如果对爬虫有一定基础,上手框架是一种好的选择. 本书主要介绍的爬虫框架有PySpi

基于Python使用scrapy-redis框架实现分布式爬虫 注

注:本文是在http://www.111cn.net/sys/CentOS/63645.htm,http://www.cnblogs.com/kylinlin/p/5198233.html的基础上加以改动的!版权归alex.shu,kylinlin所有. 1.首先介绍一下:scrapy-redis框架 scrapy-redis:一个三方的基于redis的分布式爬虫框架,配合scrapy使用,让爬虫具有了分布式爬取的功能.github地址: https://github.com/darkrho/s

Python3分布式爬虫(scrap+redis)基础知识和实战详解

背景 随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb等相关知识. 一.前沿 1.1 爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.

Redis实现分布式爬虫

redis分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的爬取 原生的scrapy是不可以实现分布式爬虫, 原因如下: 调度器无法共享 管道无法共享 scrapy-redis组件:专门为scrapy开发的一套组件. 该组件可以让scrapy实现分布式 pip install scrapy-redis 分布式爬取的流程: 1 redis配置文件的配置 将 bind 127.0.0.1 进行注释 将 protected-mode no 关闭保护模式 2 redis服务器的开启:基于