Python之分布式爬虫的实现步骤

Python之分布式爬虫的实现步骤什么是分布式爬虫 默认情况下 scrapy 爬虫是单机爬虫 只能在一台电脑上运行 因为爬虫调度器当中的队列 queue 去重和 set 集合都是在本机上创建的 其他电脑无法访问另一台电脑上的内存中的内容 分布式爬虫是一个用共同的爬虫程序 同时部署到多台电脑上运行 这样可以提高爬虫速度 实现分布式爬虫 今天我就来给大家讲一下使用 scrapy redis 实现分布式爬虫第一步 创建一个 scrapy

什么是分布式爬虫?

默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都是在本机上创建的,其他电脑无法访问另一台电脑上的内存中的内容。分布式爬虫是一个用共同的爬虫程序,同时部署到多台电脑上运行,这样可以提高爬虫速度,实现分布式爬虫。

今天我就来给大家讲一下使用scrapy_redis实现分布式爬虫

第一步:

创建一个scrapy爬虫项目,完善代码爬出你要爬取的数据,至于如何创建不知道的小伙伴请看我前面的关于scrapy框架的使用的博客

第二步:

更改scrapy爬虫项目中的一些内容

1.引入scrapy_redis,下面的代码使用一个就可以,RedisCrawlSpider和RedisSpider运行步骤相同,

from scrapy_redis.spiders import RedisCrawlSpider # from scrapy_redis.spiders import RedisSpider

 将继承换为RedisCrawlSpider或RedisSpider

Python之分布式爬虫的实现步骤

Python之分布式爬虫的实现步骤

2.注释掉start_urls,添加一个redis_key=’类名:start_urls’,当然这里的类名可以随便写,不过规范的写法是你的”爬虫类名:+start_urls”,这里字符串中类名不分大小写

redis_key='类名:start_urls'

3.setting文件中添加下面几句代码

# 使用scrapy_redis里的去重组件,不使用scrapy默认的去重方式 DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' # 使用scrapy_redis里的调度器组件,不使用默认的调度器 # scheduler调度器 SCHEDULER = 'scrapy_redis.scheduler.Scheduler' # 允许暂停,redis请求记录不丢失 SCHEDULER_PERSIST = True # # 默认的scrapy_redis请求队列形式(按优先级) # # priority优先权 # SCHEDULER_QUEUE_CLASS ='scrapy_redis.queue.SpiderPriorityQueue' # 连接服务器端的redis数据库 REDIS_URL = 'redis://root:@192.168.52.176:6379'

REDIS_URL = ‘redis://root:@192.168.52.176:6379’  @后面写要连接到的服务器端的IP,6379是默认的端口号

4.在settings文件中解注释ITEM_PIPELINES 并将红框中的代码添加进去,使数据可以存入redis数据库中,

Python之分布式爬虫的实现步骤

第三步:

1.服务端修改redis.windows.conf文件,在如图所示的位置添加: bind 服务端IP。

Python之分布式爬虫的实现步骤

2.将你的代码发给另一台主机并打开

3.开启服务端,不知道如何开启的小伙伴可以看一下我的上篇博客

4.两台主机同时在控制台输入 scrapy  crawl   爬虫名,运行爬虫程序,因为没有start_urls所以会等待传入开始网址

Python之分布式爬虫的实现步骤

5.开启服务端的主机另打开一个命令提示符,连接本地服务器,输入lpush + 第二步中的redis_key的值+ 开始网址

例:

lpush 类名:start_urls http://blog.jobbole.com/all-posts/

传入开始网址之后爬虫程序会接收到 ,然后开始爬虫

Python之分布式爬虫的实现步骤

注意:客户端的小伙伴只需要将服务端的代码文件复制过来,打开运行就行了,不需要做其他操作

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231910.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月14日 上午9:01
下一篇 2025年11月14日 上午9:22


相关推荐

  • ORM学员管理系统

    1.使用MySQL自己创建一个数据库,以下例为例2.在项目的settings.py文件中进行数据库链接信息3.在项目下的__init__文件中写入以下命令4.在项目下的models.py文件中创

    2022年3月29日
    38
  • hadoop常用命令汇总[通俗易懂]

    hadoop常用命令汇总[通俗易懂]1、查看目录下的文件列表:hadoop fs –ls [文件目录]hadoop fs -ls -h /lance 2、将本机文件夹存储至hadoop上:hadoop fs –put [本机目录] [hadoop目录] hadoop fs -put lance / 3、在hadoop指定目录内创建新目录:hadoop fs –mkdir [目录] hadoop fs -mkdir /lance4、在…

    2022年6月24日
    32
  • 二叉排序树(二)

    二叉排序树(二)

    2021年8月24日
    48
  • windows下使用labelImg标注图像

    windows下使用labelImg标注图像工作中遇到一个更好用的标注软件,速度快,操作方便,分享一下:https://blog.csdn.net/python_pycharm/article/details/102685591用于深度网络训练的数据集做标注的方法和工具有好多,像Labelme、labelImg、yolo_mark、Vatic、Sloth等等,此处暂时只介绍其中的一种标注工具:labelImg。等到后期…

    2022年6月20日
    51
  • 常用最优化方法

    常用最优化方法1 前言熟悉机器学习的童鞋都知道 优化方法是其中一个非常重要的话题 最常见的情形就是利用目标函数的导数通过多次迭代来求解无约束最优化问题 实现简单 coding 方便 是训练模型的必备利器之一 2 几个数学概念 1 梯度 一阶导数 考虑一座在 x1 x2 点高度是 f x1 x2 的山 那么 某一点的梯度方向是在该点坡度最陡的方向 而梯度的大小告诉我们坡度到底

    2026年3月19日
    3
  • asynctask使用_androidstudiohelloworld教程

    asynctask使用_androidstudiohelloworld教程Android AsyncTask 详解

    2022年4月20日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号