[scrapy]scrapy-redis快速上手/scrapy爬虫分布式改造
2018-03-05 18:15
591 查看
提示
阅读本文章,您需要:了解scrapy,知道scrapy-redis可以用来干嘛,最好已经有了可以单机运行的scrapy爬虫。
已经尝试了一些反反爬措施后仍然觉得爬取效率太低。
已经看了无数scrapy-redis文章,却和我一样不得要领。(自己太笨)
已经看了无数scrapy-redis文章,被辣鸡文章坑的生活不能自理,到现在还没配置好。(可能还是自己太笨)
提示:本文为快速上手文章,有些操作的具体步骤不详细讲,自行百度通用解法,省略的部分我认为你可以自行解决,如果遇到问题,请留言提问
使用scrapy-redis将scrapy改造为分布式
安装需要的python库和数据库
安装scrapy-redis:pip install scrapy-redis安装redis:可以仅在master(主)端安装
安装其他数据库(可选):mysql,mangoDB,用来保存大量数据,当然也可以选择不安装。用其他方法处理数据。
提示:请注意版本问题,不要过低。
配置redis
master(主)上的redis安装后,需要做以下几件事:配置redis.conf设置从外网访问:#bind 127.0.0.1
最好设置个密码
取消保护模式 protected-mode no
master启动redis,使用./redis-server redis.conf(改为你的设置文件所在位置)
尝试从slave(从)连接master的redis,连接成功(盗的图):
修改scrapy:setting.py
添加如下代码:# scrapy-redis REDIS_URL = 'redis://:yzd@127.0.0.1:6379' # for master # REDIS_URL = 'redis://:yzd@10.140.0.2:6379' # for slave (master's ip) SCHEDULER = "scrapy_redis.scheduler.Scheduler" SCHEDULER_PERSIST = True DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
对于itempipeline:你以前怎么存的数据还是怎么存,当然你也可以用redis先存,之后再一起转移出来。像我就直接存到mysql了
ITEM_PIPELINES = { # 'JD.pipelines.JdPipeline': 300, # 'scrapy_redis.pipelines.RedisPipeline': 400, 'JD.mysqlpipelines.pipelines.JDPipeline': 300, }
修改scrapy:spiders/xxxxx.py(自己命名的爬虫文件)
将继承改为继承Redisspider#!/usr/bin/env python # -*- coding: utf-8 -*- import scrapy from JD.items import JdItem import logging from scrapy_redis.spiders import RedisSpider import time # class JDcat(scrapy.Spider): class JDcat(RedisSpider): name = "JDcate" allowed_domains = ["jd.com"] # scrapy-redis redis_key = "JDcate:JD_urls" def start_requests(self): # designed by yourself # yield scrapy.Request(url=url, callback=self.parse) pass def parse(self, response): # designed by yourself pass
修改slave的存储数据库设置(可选)
如果你想要让slave抓取到的数据直接存入master的数据库,您别忘了修改slave的数据库连接设置# for master db_item = pymysql.connect(host="localhost", user="root", password="root", db="pricemonitor", port=3306, charset='utf8') # for slave # db_item = pymysql.connect(host="10.140.0.2", user="root", password="root", # db="pricemonitor", port=3306, charset='utf8')
启动分布式爬虫
启动master:scrapy crawl xxxxx启动slave: crawl xxxxx
上传了个demo源码,供大家修改使用:
https://github.com/qqxx6661/scrapy_redis_demo
有问题请留言或邮件qqxx6661@gmail.com
参考
https://www.cnblogs.com/zjl6/p/6742673.html相关文章推荐
- 快速上手——我用scrapy写爬虫(一)
- (5)分布式下的爬虫Scrapy应该如何做-windows下的redis的安装与配置
- Python爬虫---requests库快速上手
- scrapy-redis 更改队列和分布式爬虫
- 使用scrapy-redis实现分布式爬虫
- scrapy_redis 相关: 将 jobdir 保存的爬虫进度转移到 Redis
- scrapy-redis实现爬虫分布式爬取分析与实现
- 基于Python,scrapy,redis的分布式爬虫实现框架
- scrapy-redis分布式爬虫原理分析
- Scrapy八小时快速入门第一小时:安装,创建与执行我们的Scrapy爬虫
- 新浪微博爬虫(Scrapy、Redis)环境搭建
- 基于Python,scrapy,redis的分布式爬虫实现框架
- scrapy-redis实现爬虫分布式爬取分析与实现
- linux分布式scrapy爬虫之安装scrapy-redis
- scrapy-redis所有request爬取完毕,如何解决爬虫空跑问题?
- Python 爬虫框架 Scrapy 快速使用
- windows下scrapy-redis如何为不同的爬虫项目分配不同的db,而不仅仅使用db0
- 【转】Python爬虫(7)_scrapy-redis
- Redis-Scrapy分布式爬虫:当当网图书为例
- Scrapy 快速上手