Scrapy-redis改造scrapy实现分布式多进程爬取
来源:互联网 发布:registax mac 编辑:程序博客网 时间:2024/06/06 09:20
一.基本原理:
Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
参考Scrapy-Redis官方github地址
二.准备工作:
1.安装并启动redis,Windows和lunix可以参考这篇
2.scrapy+Python环境安装
3.scrapy_redis环境安装
$ pip install scrapy-redis$ pip install redis
三.改造scrapy爬虫:
1.首先在settings.py中配置redis(在scrapy-redis 自带的例子中已经配置好)
SCHEDULER = "scrapy_redis.scheduler.Scheduler" SCHEDULER_PERSIST = True SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue' REDIS_URL = None # 一般情况可以省去 REDIS_HOST = '127.0.0.1' # 也可以根据情况改成 localhost REDIS_PORT = 6379
2.item.py的改造
from scrapy.item import Item, Fieldfrom scrapy.loader import ItemLoaderfrom scrapy.loader.processors import MapCompose, TakeFirst, Joinclass ExampleItem(Item): name = Field() description = Field() link = Field() crawled = Field() spider = Field() url = Field()class ExampleLoader(ItemLoader): default_item_class = ExampleItem default_input_processor = MapCompose(lambda s: s.strip()) default_output_processor = TakeFirst() description_out = Join()
3.spider的改造。star_turls变成了redis_key从redis中获得request,继承的scrapy.spider变成RedisSpider。
from scrapy_redis.spiders import RedisSpiderclass MySpider(RedisSpider): """Spider that reads urls from redis queue (myspider:start_urls).""" name = 'myspider_redis' redis_key = 'myspider:start_urls' def __init__(self, *args, **kwargs): # Dynamically define the allowed domains list. domain = kwargs.pop('domain', '') self.allowed_domains = filter(None, domain.split(',')) super(MySpider, self).__init__(*args, **kwargs) def parse(self, response): return { 'name': response.css('title::text').extract_first(), 'url': response.url, }
四.启动爬虫:
$ scrapy crawl myspider
可以输入多个来观察多进程的效果。。打开了爬虫之后你会发现爬虫处于等待爬取的状态,是因为list此时为空。所以需要在redis控制台中添加启动地址,这样就可以愉快的看到所有的爬虫都动起来啦。
lpush mycrawler:start_urls http://www.***.com
redis数据库中可以看到如下三项,第一个为已过滤并下载的request,第二个公用item,第三个为待处理request。
阅读全文
0 0
- Scrapy-redis改造scrapy实现分布式多进程爬取
- scrapy-redis实现scrapy分布式爬取分析
- scrapy-redis实现爬虫分布式爬取分析与实现
- scrapy-redis实现爬虫分布式爬取分析与实现
- Scrapy-redis实现分布式爬取的过程与原理
- scrapy-redis 分布式爬取源码分析
- scrapy-redis分布式爬取彩票网站信息
- scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取
- Scrapy通过redis实现分布式抓取
- 使用scrapy-redis实现分布式爬虫
- Scrapy-redis分布式爬虫
- scrapy实现分页爬取
- scrapy实现递归爬取
- 使用scrapy,redis, mongodb实现的一个分布式网络爬虫
- 基于Python,scrapy,redis的分布式爬虫实现框架
- scrapy与redis结合实现服务化的分布式爬虫
- 基于Python+scrapy+redis的分布式爬虫实现框架
- Python之Scrapy框架Redis实现分布式爬虫详解
- 【Qt】pro文件参数
- 十分钟入门pandas框架及补充解释
- 关于SD单据的状态
- 解决火狐浏览器对自动补全功能的缺憾
- 如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求?
- Scrapy-redis改造scrapy实现分布式多进程爬取
- 538. Convert BST to Greater Tree
- Hadoop安装
- mysql 5.7.15 union order by 子查询排序不生效
- Java中20个常见的错误及规避方法
- 智慧社区有多“智慧”?解读智能化背后的技术应用
- 如何重启mysql
- linux中ls和 ll 命令
- MySQL清除密码