Scrapy分布式爬虫打造搜索引擎-(七)scrapy-redis 分布式爬虫
Python分布式爬虫打造搜索引擎
基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
推荐前往我的个人博客进行阅读:http://blog.mtianyan.cn/
目录分章效果更佳哦
分章查看目录:
- Scrapy分布式爬虫打造搜索引擎 - (一)基础知识
- Scrapy分布式爬虫打造搜索引擎 - (二)伯乐在线爬取所有文章
- Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬取
- Scrapy分布式爬虫打造搜索引擎 - (四)通过CrawlSpider对拉勾网进行整站爬取
- Scrapy分布式爬虫打造搜索引擎-(五)爬虫与反爬虫的战争
- Scrapy分布式爬虫打造搜索引擎-(六)scrapy进阶开发
- Scrapy分布式爬虫打造搜索引擎-(七)scrapy-redis 分布式爬虫
- Scrapy分布式爬虫打造搜索引擎-(八)elasticsearch结合django搭建搜索引擎
七、scrapy-redis 分布式爬虫
1. 分布式爬虫设计及redis介绍
多个爬虫如何进行调度,一个集中的状态管理器
优点:
- 利用多机器带宽
- 利用多ip加速爬取速度
两个问题:
- request队列的集中管理
- 去重集中管理
分布式。
2. redis命令
hexists course_dict mtianyan
hexists course_dict mtianyan2
Redis HEXISTS命令被用来检查哈希字段是否存在。
返回值
回复整数,1或0。
- 1, 如果哈希包含字段。
- 0 如果哈希不包含字段,或key不存在。
hdel course_dict mtianyan
Redis HDEL命令用于从存储在键散列删除指定的字段。如果没有这个哈希中存在指定的字段将被忽略。如果键不存在,它将被视为一个空的哈希与此命令将返回0。
返回值回复整数,从散列中删除的字段的数量,不包括指定的但不是现有字段。
hgetall course_dict
Redis Hgetall 命令用于返回哈希表中,所有的字段和值。
在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。
hset course_dict bobby "python scrapy"
Redis Hset 命令用于为哈希表中的字段赋值 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。
如果字段已经存在于哈希表中,旧值将被覆盖。
hkey course_dict
Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。
hvals course_dict
Redis Hvals 命令返回哈希表所有字段的值。
lpush mtianyan "scary"
rpush mtianyan "scary"
存入key-value
lrange mtianyan 0 10
取出mtianyan的0到10
命令 | 说明 |
---|---|
lpop/rpop | 左删除/右删除 |
llen mtianyan | 长度 |
lindex mtianyan 3 | 第几个元素 |
sadd | 集合做减法 |
siner | 交集 |
spop | 随机删除 |
srandmember | 随机选择多个元素 |
smembers | 获取set所有元素 |
srandmember | 随机选择多个元素 |
zadd | 每个数有分数 |
zcount key 0 100 | 0-100分数据量统计 |
3. scrapy-redis搭建分布式爬虫
需要的环境:
Python 2.7, 3.4 or 3.5
Redis >= 2.8
Scrapy >= 1.1
redis-py >= 2.10
pip install redis
setting.py设置
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 300
}
要继承redisspider
from scrapy_redis.spiders import RedisSpider
class MySpider(RedisSpider):
name = 'myspider'
def parse(self, response):
# do stuff
pass
启动spider
scrapy runspider myspider.py
push urls to redis:放置初始url进入队列
redis-cli lpush myspider:start_urls http://google.com
搭建示例
- 创建新的scrapy项目
- 去github拷贝scrapy-redis源码
不同spider使用不同redis list
将队列从内存放入redis中
next_requests
所有的yield出去的request会被
ScrapyRedisTest\scrapy_redis\scheduler.py
的以及重写的enqueue_request接收
推荐阅读
-
scrapy-redis 分布式哔哩哔哩网站用户爬虫
-
21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
-
21天打造分布式爬虫-Crawl爬取小程序社区(八)
-
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
-
scrapy-redis分布式爬虫的搭建过程(理论篇)
-
21天打造分布式爬虫-Scrapy框架(七)
-
Scrapy-redis分布式爬虫爬取豆瓣电影详情页
-
分布式爬虫 Scrapy-Redis案例:搜房网房天下
-
Python信息系统(Scrapy分布式+Django前后端)-4.Gerapy爬虫分布式部署
-
21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)