分布式爬虫

分布式

分布式的本质就如上期提到的一个概念:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。这就是在说,把廉价的计算机堆到一起,通过程序控制,使其整体用起来像个高性能计算机,目的就是节约成本。

对于分布式爬虫系统来说,假设1台机器能10天爬完一个任务,如果部署10台机器,那么1天就会完成这个任务。这样就用可以接受的成本,让系统的效率提高了十倍。

实现方式

基于scrapy+redis(结合scrapy-redis组件)

scrapy-redis组件作用:

  -可以给原生的scrapy框架提供共享的管道和调度器

  -pip install scrapy-redis

新建工程

scrapy startproject FBS

cd FBS

scrapy genspider -t crawl fbspc www.xxx.com

实现流程

1.修改爬虫文件

#1.导包
from scrapy_redis.spiders import RedisCrawlSpider

#2.修改当前爬虫类的父类为RedisCrawlSpider

#3.将start_url替换成redis_keys属性,属性值为任意字符串
redis_key = "test"  # 可以被共享的调度器的名称,最终是需要将起始的url手动放置在redis_key表示的队列中

#4.进行数据解析

2.对setting.py进行配置

-指定调度器 

# 增加一个去重容器类的配置,作用使用redis的set集合来存储请求的指纹数据,从而实现请求去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#配置调度器是否要持久化,也就是的那个爬虫结束了,要不要清空Redis中请求队列和去重指纹的set。如果是True,表示要初九话,不清空数据,否则清空数据
SCHEDULER_PERSIST = True

-指定管道

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline':400
}

-指定redis

REDIS_HOST = '127.0.0.1'
PORT = 6379
REDIS_ENCODING = 'utf-8'
REDIS_PARAMS = {'password':'123456'}

3.配置redis的配置文件(redis.window.conf)

  -解除默认绑定

    -56行注释:#bind 127.0.0.1

  -关闭保护模式

    -75行:protected-mode no

4.启动redis服务和客户端

5.执行scrapy工程

   程序会停留在listening位置:等待起始uel加入

 6.向redis_key表示的队列中添加起始url

  需要在redis客户端执行如下命令:

    -lpush test https://wz.sun0769.com/political/index/politicsNewest?id=1&page=1  # test为redis_key,后面的url为自己添加的

 

posted @ 2023-06-05 14:57  小青年て  阅读(29)  评论(0编辑  收藏  举报