需要安装 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
# 指定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)