环境搭建
需要安装 scrapy 和 scrapy-redis
pip install scrapy pip install scrapy-redis
安装配置好 redis
如果是mac种用homebrew安装的redis,配置文件路径为:
/usr/local/etc/redis.conf
修改配置文件
# bind 127.0.0.0 bind 0.0.0.0
第一步,配置settings.py
# 指定Redis数据库 REDIS_URL = "redis://localhost:6379" # 使用scrapy-redis 的调度器替代原版调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 使用scrapy-redis 的去重过滤器替代原版 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 启用scrapy-redis 的 RedisPipeline ITEM_PIPELINES = { "scrapy_redis.pipelines.RedisPipeline": 300, } # 爬虫停止后保留请求队列和去重集合 SCHEDULER_PERSIST = True, # False: 清理(默认)
第二步,修改爬虫文件
from scrapy_redis.spiders import RedisSpider # 1. 修改基类: Spider -> RedisSpider class BooksSpider(RedisSpider): name = "books" # 2. 删除start_urls
第三步,启动爬虫
在各个服务器启动爬虫,爬虫将会进入等待状态
scrapy crawl books
第四步,发送爬虫起点
books 为爬虫名称
# 先启动redis $ redis-cli > lpush books:start_urls "http://www.baidu.com" # 查看过滤器数量 > scard books:dupefilter (integer) 36001 # 查看请求队列数量 > zcard books:requests (integer) 27410 # 查看保存数据数量 > llen books:items (integer) 478118
第五步,导出数据
# -*- coding: utf-8 -*- # @File : export_data.py # @Date : 2018-05-21 # 从redis数据库导出数据 import json import redis from pprint import pprint # redis中存放数据的key ITEM_KEY = "books_distribution:items" def process_item(item): """处理数据 :param item{dict}: 单条数据 :return: None """ pprint(item) r = redis.Redis(host="localhost", port=6379) for _ in range(r.llen(ITEM_KEY)): data = r.lpop(ITEM_KEY) item = json.loads(data) process_item(item)