栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

scrapy和redis一起用,构成分布式爬虫

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

scrapy和redis一起用,构成分布式爬虫

scrapy是一个分布式的爬虫框架,如果像普通爬虫一样使用,那么毫无意义,如果要使用分布式爬虫,那么就需要配置Redis

安装及使用

在终端中使用
pip install scrapy_redis
即可安装
pip 会自动安装以来

使用Redis缓存网页并自动去重

由于Scrapy_redis已经封装了大部分的流程,所以我们使用它不会有任何难度。

    启动redis

在Windows系统中,通过CMD的cd命令进入存放Redis的文件夹,并运行:
redis-server.exe
2. 修改爬虫

在前面的代码中,爬虫继承自scrapy.Spider这个父类。这是Scrapy里面最基本的一个爬虫类,只能实现基本的爬虫功能。现在需要把它替换掉,从而实现更高级的功能。首先需要导入支持Redis的爬虫父类并使用:
from scrapy_redis.spiders import RedisSpiderclass Exercise114Spider(RedisSpider):name = “exercise11_4”
`redis_key = ‘exercisell4spider : start_urls’

这里的redis_key实际上就是一个变量名,之后爬虫爬到的所有URL都会保存到Redis中这个名为“exercise114spider:start_urls”的列表下面,爬虫同时也会从这个列表中读取后续页面的URL。这个变量名可以任意修改,里面的英文冒号也不是必需的。不过一般习惯上会写成“爬虫名:start_urls”这种形式,这样看到名字就知道保存的是什么内容了。

此时已经建立了一个分布式爬虫,只不过现在只有一台计算机。

修改设置

爬虫已经被修改成分布式了,但是还差一步,还需要修改setting

    修改scheduler
    首先是调度Scheduler的替换。这是Scrapy中的调度员。在settings.py中添加以下代码
    #Enables scheduling storing requests queue in redis.SCHEDULER = "scrapy_redis.scheduler.Scheduler"去重
    # Ensure all spiders share same duplicates filter through redis.DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"修改调度
      队列
      SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderQueue’栈
      SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderStack’优先级队列
      SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderPriorityQueue’不清理Redis队列
      crawls.SCHEDULER_PERSIST =True

如果这一项为True,那么Redis中的URL不会被Scrapy_redis清理掉。这样的好处是,爬虫停止了再重新启动,它会从上次暂停的地方开始继续爬取。如果设置成了False,那么Scrapy_redis每一次读取了URL以后,就会把这个URL删除。爬虫暂停以后再重新启动,它会重新开始爬。由于现在的爬虫和Redis在同一台计算机上面运行,所以可以不需要配置Redis的信息。Scrapy_redis会默认Redis就运行在现在这台计算机上,IP和端口也都是默认的127.0.0.1和6379。

果Redis不在本地的话,就需要将它们写出来

REDIS_HOST = '127.0.0.1’#修改为Redis的实际IP地址
REDIS_PORT = 6379 #修改为Redis的实际端

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726246.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号