天天看点

scrapy-redis 安装 及使用 结合例子解释scrapy-redis安装及配置 scrapy-redis 原理及解释

pip install scrapy-redis

easy_install scrapy-redis

下载

http://redis.io/download

版本推荐

stable 3.0.2

运行redis

redis-server redis.conf

清空缓存

redis-cli flushdb

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

spider 继承redisspider

class tempspider(redisspider)  

name = "temp"

redis_key  = ''temp:start_url"

在redis的src目录下,执行 ./redis-server启动服务器

执行 ./redis-cli 启动客户端

启动scropy-redis的代码;

如启动name= "lhy",start_urls="lhy:start_urls" 的spider。

如果在redis中没有 主键为lhy:start_urls 的list,则爬虫已只监听等待。

此时,在redis客户端执行:lpush lhy:start_urls   http://blog.csdn.net/u013378306/article/details/53888173

可以看到爬虫开始抓取。在 redis客户端下输入 keys *,查看所有主键

原来的 lhy:start_urls 已经被自动删除,并新建了 一个lhy:dupefilter (set),一个 lhy:items (list), 一个 lhy:requests(zset) 

lhy:dupefilter用来存储 已经requests 过的url的hash值,分布式去重时使用到,  lhy:items是分布式生成的items,lhy:requests是新生成的 url封装后的requests。

理论上,lhy:dupefilter 等于已经request的数量,一直增加

lhy:items 是经过 spider prase生成的

lhy:requests 是有序集合zset,scrapy-redis 重新吧他封装成了一个队列,requests是spider 解析生成新url后重新封装,如果不载有新的url产生,则随着spider的prase,一直减少。总之取request时出队列,新的url会重新封装成request后增加进来,入队列。

scrapy-redis 重写了scrapy的多个类,具体请看http://blog.csdn.net/u013378306/article/details/53992707

并且在setting.py中 配置了这些类,所以当运行scrapy-redis例子时,自动使用了scrapy-redis 重写的类。

下载scrapy-redis源代码 https://github.com/rolando/scrapy-redis

文档结构如下:

scrapy-redis 安装 及使用 结合例子解释scrapy-redis安装及配置 scrapy-redis 原理及解释

其中,src 中是scrapy-redis的源代码。

example-redis 是写好的例子,其中有三个例子

scrapy-redis 安装 及使用 结合例子解释scrapy-redis安装及配置 scrapy-redis 原理及解释

(1)domz.py   (2) mycrawler_redis.py   (3) myspider.py

文档中队者三个例子的解释如下

domz.py :此例子仅仅是抓取一个网站下的数据,没有用分布式

mycrawler_redis.py

此例子 使用 rediscrawlspider类,支持分布式去重爬取,并且 可以定义抓取连接的rules

myspider.py 此例子支持分布式去重爬取,但不支持定义规则抓取url