爬虫框架Scrapy 之(八) --- scrapy分布式部署

本文详细介绍分布式爬虫的架构,包括master端与slaver端的角色分工,以及如何利用Redis实现数据共享与任务分配。通过具体步骤指导如何搭建分布式爬虫环境,实现多机协同爬取,提高数据抓取效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分布式爬虫

介绍

  一个分布式爬虫,一般有两个端:master端,主要负责处理数据;slaver端,主要负责爬取数据业务。

  不同的端采用不同的平台。服务程序都用linux系统,业务程序都用widoms系统。 

  服务器端(master端):

    可以用某一台主机作为redis服务器的运行方(即服务端),也称为master。服务程序都用linux系统

  客户端(slaver端):

    1)把普通爬虫修改成分布式,去掉start_urls(不让slaver随意的执行),替换成redis_key(为了让master能够控制slaver的爬取)

    2)修改自己配置文件,即在配置文件中加上scrapy_redis的组件。。业务程序都用widoms系统

安装

  •  pip install scrapy_redis

部署

  •    settings.py 文件中
 1 ITEM_PIPELINES = {
 2    # 'DushuPro.pipelines.DushuproPipeline': 300, # 数据的管道现在统一成分布式的管道
 3     "scrapy_redis.pipelines.RedisPipeline":400, # 开启分布式管道
 4 }
 5 
 6 # 指定redis分布式管道的服务器
 7 # 主机地址
 8 REDIS_HOST = "39.106.191.15"
 9 # 端口号
10 REDIS_PORT = 6379
11 # 密码
12 # REDIS_PARAMS = {"password":"xxxx"}
13 
14 # 调度器,把scrapy调度器修改成scrapy_redis调度器
15 SCHEDULER = "scrapy_redis.scheduler.Scheduler"
16 # 是否允许调度的过程暂停
17 SCHEDULER_PERSIST = True 
18 # 去重组件
19 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  •  spilder/book.py 文件中
# -*- coding: utf-8 -*-
import scrapy
# 在scrapy中有很多的爬虫模板,这些模板都是基于basic模板进行的功能的扩展(例如:crawl模板、feed模板等),最常用的就是crawl(即增量式爬虫),basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎的工作;
# 【增量式爬虫】首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度,再从新的url网页中提取新的url,再进行调度依次类推直至所有的url都匹配完成为止

from scrapy.linkextractors import LinkExtractor
# 用于根据一定的规则从网页中提取新的url

from scrapy.spiders import CrawlSpider, Rule
# CrawlSpider增量爬虫,Rule一个规则对象,可以根据LinkExtractor匹配的网址发起请求,并且回调函数

from DushuPro.items import DushuproItem
# 数据模型导入

from scrapy_redis.spiders import RedisCrawlSpider
# 分布式爬虫继承文件

# 将此类继承自RedisCrawlSpider
class BookSpider(RedisCrawlSpider):
    name = 'book'
    allowed_domains = ['dushu.com']
    # start_urls = ['https://www.dushu.com/book/1002.html']
    # 起始url从redis数据库中的book:start_urls这个键中获取
    redis_key = "book:start_urls"


# -----------------------后面的数据没有变化---------------------

 运行

  将起始url即start_url放入到阿里云服务器redis数据库的book:start_urls键中。然后启动爬虫,多台计算机共同访问此url进行爬取

  在终端连接上redis数据库后,输入:LPUSH book: start_url https://www.dushu.com/book/1002.html

  之后运行终止中的爬虫自动启动爬取

总结

分布式redis数据库中有4个key

  1. xxx:start_urls:用于向分布式系统提供起始url
  2. xxx:requests:用于盛放在爬虫运行的过程中新产生的那些请求对象
  3. xxx:items:用于存储爬虫爬取的数据
  4. xxx:dupefilter:用于盛放已经被访过的那些请求对象

分布式爬虫的运行过程

  1.  把所有的分机(slaver端)上的爬虫运行起来,由于没有start_urls,所有的分机都在等待起始url的产生
  2.  通过服务器脚本把那些起始的url放入到xxx:start_urls列表中
  3.  所有的slaver去竞争master端的xxx:start_urls中的起始url,一旦竞争到url则开启爬虫,没有竞争到slaver端继续监视xxx:start_urls和xxx:requests这两个列表
  4.  所有的分机如果对某个url访问成功则会把这个url加入去重列表中(即xxx:dupefilter),如果没有访问成功则会启动重传机制,如果再不成功就会这个url返回给requests列供其他slaver来使用
  5.  爬取成功的数据会通过管道组件存入到redis数据库的xxx:items列表中,并且把该页面新产生的url加入到xxx:requests列表中
  6.  如果所有的url都被取完(start_urls和requests两个列表都为空),则所有的slaver端都会暂停等待

 

转载于:https://www.cnblogs.com/TMMM/p/11370996.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值