Python爬虫编程10——Scrapy+Redis进阶

目录

   背景

Redis是什么?

数据库的发展历史

NoSQL和SQL数据库的比较

Redis特性

Redis有什么用?

Redis应用场景

Redis怎么用?

Redis的安装及启动

Redis的配置文件

Redis数据库简单使用

redis常用五大数据类型

1.redis-string

2.redis-list(单值多value)

3.redis-Hash

4.redis-set(不重复的)

5.redis-Zset

Python操作Redis

redispy安装及连接

字符串相关操作

列表相关操作

集合相关操作

哈希相关操作

Scrapy-分布式

        什么是scrapy_redis

回顾scrapy工作流程

scrapy_redis工作流程

scrapy_redis下载

scrapy_redis中的settings文件

改写分布式

运行结束后redis中多了三个键


背景

随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。

Redis是什么?

Redis是一个高性能的,开源的,C语言开发的,键值对存储数据的nosql数据库。

NoSQL:not only sql,泛指非关系型数据库 Redis/MongoDB/Hbase Hadoop

关系型数据库:MySQL、oracle、SqlServer

数据库的发展历史

1.在互联网+大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求;(单数据库实例)

2.随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求;(缓存(memcache)+单数据库实例)

3.缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大,(缓存+主从数据库+读写分离)

4.数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈、(缓存+主从数据库集群+读写分离+分库分表)

5.互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据。(nosql+主从数据库集群+读写分离+分库分表)

NoSQL和SQL数据库的比较

  • 适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,nosql反之
  • 事务:SQL对事务的支持非常完善,而nosql基本不支持事务
  • 两者在不断的取长补短

Redis特性

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
  • Redis支持数据的备份

Redis有什么用?

Redis的主要作用:快速存取

Redis应用场景

点赞/秒杀/直播平台的在线好友列表/商品排行榜

Redis怎么用?

官网地址:Redishttps://redis.io/

命令地址:Redis 命令参考 — Redis 命令参考

Redis的五大数据类型以及应用场景:

string/list/set/hash/zset

Redis的安装及启动

查看帮助命令
redis-server --help

启动服务
redis-server.exe

链接客户端
redis-cli.exe

Redis的配置文件

/etc/redis/redis.conf

当redis作为守护进程运行的时候,它会写一个 pid 到 /var/run/redis.pid 文件里面。
daemonize no

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

设置数据库的数目。
databases 16

根据给定的时间间隔和写入次数将数据保存到磁盘
下面的例子的意思是:
900 秒内如果至少有 1 个 key 的值变化,则保存
300 秒内如果至少有 10 个 key 的值变化,则保存
60 秒内如果至少有 10000 个 key 的值变化,则保存
 
save 900 1
save 300 10
save 60 10000

监听端口号,默认为 6379,如果你设为 0 ,redis 将不在 socket 上监听任何客户端连接。
port 6379

Redis默认只允许本地连接,不允许其他机器连接
bind 127.0.0.1

Redis数据库简单使用

DBSIZE      查看当前数据库的key数量
keys *      查看key的内容
FLUSHDB     清空当前数据库的key的数量
FLUSHALL    清空所有库的key(慎用)
exists key  
好的,您的问题是关于如何基于PythonScrapyRedis和Rule组件实现分布式爬虫京东华为笔记本的。首先,您需要安装ScrapyRedis,并在Scrapy的配置文件添加Redis相关的配置: ```python # 在settings.py添加以下配置 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" SCHEDULER = "scrapy_redis.scheduler.Scheduler" SCHEDULER_PERSIST = True REDIS_URL = 'redis://localhost:6379' ``` 然后,您需要编写Spider和Item Pipeline,其Spider负责解析并抓网页,Item Pipeline负责处理抓到的数据。下面是一个示例的Spider代码: ```python from scrapy_redis.spiders import RedisSpider from scrapy.selector import Selector from ..items import ProductItem class JdSpider(RedisSpider): name = 'jd' redis_key = 'jd:start_urls' def parse(self, response): sel = Selector(response) products = sel.xpath('//div[@class="gl-i-wrap"]') for product in products: item = ProductItem() item['name'] = product.xpath('div[@class="p-name"]/a/em/text()').extract_first() item['price'] = product.xpath('div[@class="p-price"]/strong/i/text()').extract_first() item['url'] = product.xpath('div[@class="p-name"]/a/@href').extract_first() yield item ``` 在Item Pipeline,您可以对抓到的数据进行清洗和存储,下面是一个示例的Item Pipeline代码: ```python import pymongo class JdPipeline(object): def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): self.db['products'].insert(dict(item)) return item ``` 最后,您需要创建一个Redis队列,并向队列添加起始URL,如下所示: ```python import redis r = redis.Redis(host='localhost', port=6379) r.lpush('jd:start_urls', 'https://search.jd.com/Search?keyword=%E5%8D%8E%E4%B8%BA%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8') ``` 最终,您就可以运行分布式爬虫并抓京东华为笔记本的数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值