scrapy-redis 安装 及使用 结合例子解释

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 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 flush

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

scrapy配置redis

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

在scrapy中使用scrapy-redis

spider 继承RedisSpider

class tempSpider(RedisSpider)  

name = "temp"

redis_key  = ''temp:start_url"

启动redis

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

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


设置好setting.py的redis 的ip和端口

启动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-redis 重写了scrapy的多个类,具体请看http://blog.csdn.net/u013378306/article/details/53992707

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


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

文档结构如下:

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

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

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

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

* **dmoz**

  This spider simply scrapes dmoz.org.

* **myspider_redis**

  This spider uses redis as a shared requests queue and uses
  ``myspider:start_urls`` as start URLs seed. For each URL, the spider outputs
  one item.

* **mycrawler_redis**

  This spider uses redis as a shared requests queue and uses
  ``mycrawler:start_urls`` as start URLs seed. For each URL, the spider follows
  are links.


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

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class DmozSpider(CrawlSpider):
    """Follow categories and extract links."""
    name = 'dmoz'
    allowed_domains = ['dmoz.org']
    start_urls = ['http://www.dmoz.org/']

    rules = [
        Rule(LinkExtractor(
            restrict_css=('.top-cat', '.sub-cat', '.cat-item')
        ), callback='parse_directory', follow=True),
    ]

    def parse_directory(self, response):
        for div in response.css('.title-and-desc'):
            yield {
                'name': div.css('.site-title::text').extract_first(),
                'description': div.css('.site-descr::text').extract_first().strip(),
                'link': div.css('a::attr(href)').extract_first(),
            }

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

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

from scrapy_redis.spiders import RedisCrawlSpider


class MyCrawler(RedisCrawlSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'mycrawler_redis'
    redis_key = 'mycrawler:start_urls'

    rules = (
        # follow all links
        Rule(LinkExtractor(), callback='parse_page', follow=True),
    )

    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }

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

from scrapy_redis.spiders import RedisSpider


class MySpider(RedisSpider):
    """Spider that reads urls from redis queue (myspider:start_urls)."""
    name = 'myspider_redis'
    redis_key = 'myspider:start_urls'

    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop('domain', '')
        self.allowed_domains = filter(None, domain.split(','))
        super(MySpider, self).__init__(*args, **kwargs)

    def parse(self, response):
        return {
            'name': response.css('title::text').extract_first(),
            'url': response.url,
        }


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
9天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
61 24
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
58 7
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4
|
2月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
156 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
1月前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
2月前
|
NoSQL Ubuntu Linux
Redis 安装
10月更文挑战第14天
70 1
|
1月前
|
NoSQL 编译器 Linux
【赵渝强老师】Redis的安装与访问
本文基于Redis 6.2版本,详细介绍了在CentOS 7 64位虚拟机环境中部署Redis的步骤。内容包括安装GCC编译器、创建安装目录、解压安装包、编译安装、配置文件修改、启动服务及验证等操作。视频讲解和相关图片帮助理解每一步骤。
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
346 3
|
2月前
|
NoSQL Linux Shell
Redis 的安装与部署(图文)
Redis 的安装与部署(图文)
|
2月前
|
NoSQL Ubuntu Redis
Ubuntu安装redis
本文介绍了在Ubuntu系统上安装Redis的两种方法:一种是通过编译安装本地Redis包,包括下载、解压、编译安装、配置启动和测试连接的步骤;另一种是通过apt安装在线的Redis包,并提供了更新系统软件包列表、安装Redis服务器、检查Redis服务器状态和测试连接的命令。
196 0
Ubuntu安装redis