博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy分布式爬虫打造搜索引擎-(七)scrapy-redis 分布式爬虫
阅读量:6793 次
发布时间:2019-06-26

本文共 1922 字,大约阅读时间需要 6 分钟。

Python分布式爬虫打造搜索引擎

基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

推荐前往我的个人博客进行阅读:

目录分章效果更佳哦

分章查看目录:

七、scrapy-redis 分布式爬虫

1. 分布式爬虫设计及redis介绍

多个爬虫如何进行调度,一个集中的状态管理器

优点:

  • 利用多机器带宽
  • 利用多ip加速爬取速度

两个问题:

  1. request队列的集中管理
  2. 去重集中管理

分布式。

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

redis命令.png
命令 说明
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 RedisSpiderclass 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

搭建示例

  1. 创建新的scrapy项目
  2. 去github拷贝scrapy-redis源码

不同spider使用不同redis list

将队列从内存放入redis中
next_requests

所有的yield出去的request会被

ScrapyRedisTest\scrapy_redis\scheduler.py
的以及重写的enqueue_request接收

转载地址:http://nwlgo.baihongyu.com/

你可能感兴趣的文章
vSphere 初体验之ESXi5的安装
查看>>
XenDesktop禁用特定盘符重定向(优化模式)
查看>>
nginx的web连接出现过多的TIME_WAIT
查看>>
Web开发中需要了解的东西
查看>>
Ceph运维告诉你分布式存储的那些“坑”
查看>>
程序员:伤不起的三十岁
查看>>
【ZooKeeper Notes 4】可视化zookeeper的事务日志
查看>>
Java中的对象和垃圾回收
查看>>
Python3 处理 gb18030 乱码
查看>>
微软Azure云之企业Exchange 2016部署1—项目介绍
查看>>
webSphere
查看>>
使用Intellj Idea打开选中文件/文件夹
查看>>
MyElicpse整合Tomcat
查看>>
Gluster管理命令的总结与归纳
查看>>
我的友情链接
查看>>
linux内核的编译与安装
查看>>
FusionCharts free(图形报表)中文开发指南
查看>>
使用 Screen 创建并管理多个 shell
查看>>
adobe acrobat professional9.0中的PDF/A模式是什么意思
查看>>
【码云周刊第 30 期】打造场景化的图片特效处理工具
查看>>