python爬虫:scrapy-redis实现分布式爬虫

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: python爬虫:scrapy-redis实现分布式爬虫

环境搭建

需要安装 scrapy 和 scrapy-redis


pip install scrapy
pip install scrapy-redis

安装配置好 redis

如果是mac种用homebrew安装的redis,配置文件路径为:


/usr/local/etc/redis.conf

修改配置文件


# bind 127.0.0.0
bind 0.0.0.0

第一步,配置settings.py

# 指定Redis数据库
REDIS_URL = "redis://localhost:6379"
# 使用scrapy-redis 的调度器替代原版调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 使用scrapy-redis 的去重过滤器替代原版
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 启用scrapy-redis 的 RedisPipeline
ITEM_PIPELINES = {
    "scrapy_redis.pipelines.RedisPipeline": 300,
}
# 爬虫停止后保留请求队列和去重集合
SCHEDULER_PERSIST = True, # False: 清理(默认)

第二步,修改爬虫文件

from scrapy_redis.spiders import RedisSpider
# 1. 修改基类: Spider -> RedisSpider
class BooksSpider(RedisSpider):
    name = "books"
    # 2. 删除start_urls

第三步,启动爬虫

在各个服务器启动爬虫,爬虫将会进入等待状态


scrapy crawl books

第四步,发送爬虫起点

books 为爬虫名称


# 先启动redis
$ redis-cli
> lpush books:start_urls "http://www.baidu.com"
# 查看过滤器数量
> scard books:dupefilter
(integer) 36001
# 查看请求队列数量
> zcard books:requests
(integer) 27410
# 查看保存数据数量
> llen books:items
(integer) 478118

第五步,导出数据

# -*- coding: utf-8 -*-
# @File    : export_data.py
# @Date    : 2018-05-21
# 从redis数据库导出数据
import json
import redis
from pprint import pprint
# redis中存放数据的key
ITEM_KEY = "books_distribution:items"
def process_item(item):
    """处理数据
    :param
        item{dict}: 单条数据
    :return:
        None
    """
    pprint(item)
r = redis.Redis(host="localhost", port=6379)
for _ in range(r.llen(ITEM_KEY)):
    data = r.lpop(ITEM_KEY)
    item = json.loads(data)
    process_item(item)
相关实践学习
基于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
相关文章
|
17天前
|
数据采集 XML 数据处理
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页内容并进行简单的数据处理。通过学习本文,读者将了解Web爬虫的基本原理和Python爬虫库的使用方法。
|
23天前
|
缓存 NoSQL Redis
Python缓存技术(Memcached、Redis)面试题解析
【4月更文挑战第18天】本文探讨了Python面试中关于Memcached和Redis的常见问题,包括两者的基础概念、特性对比、客户端使用、缓存策略及应用场景。同时,文章指出了易错点,如数据不一致和缓存淘汰策略,并提供了实战代码示例,帮助读者掌握这两款内存键值存储系统的使用和优化技巧。通过理解其核心特性和避免常见错误,可以提升在面试中的表现。
29 2
|
23小时前
|
数据采集 Web App开发 数据处理
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
Lua vs. Python:哪个更适合构建稳定可靠的长期运行爬虫?
|
6天前
|
数据采集 Web App开发 Java
Python 爬虫:Spring Boot 反爬虫的成功案例
Python 爬虫:Spring Boot 反爬虫的成功案例
|
7天前
|
数据采集 Python
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页上的信息。通过分析目标网页的结构,利用Python中的requests和Beautiful Soup库,我们可以轻松地提取所需的数据,并将其保存到本地或进行进一步的分析和处理。无论是爬取新闻、股票数据,还是抓取图片等,本文都将为您提供一个简单而有效的解决方案。
|
8天前
|
数据采集 存储 XML
如何利用Python构建高效的Web爬虫
本文将介绍如何使用Python语言以及相关的库和工具,构建一个高效的Web爬虫。通过深入讨论爬虫的基本原理、常用的爬虫框架以及优化技巧,读者将能够了解如何编写可靠、高效的爬虫程序,实现数据的快速获取和处理。
|
14天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
16天前
|
数据采集 存储 大数据
Python爬虫:数据获取与解析的艺术
本文介绍了Python爬虫在大数据时代的作用,重点讲解了Python爬虫基础、常用库及实战案例。Python因其简洁语法和丰富库支持成为爬虫开发的优选语言。文中提到了requests(发送HTTP请求)、BeautifulSoup(解析HTML)、Scrapy(爬虫框架)、Selenium(处理动态网页)和pandas(数据处理分析)等关键库。实战案例展示了如何爬取电商网站的商品信息,包括确定目标、发送请求、解析内容、存储数据、遍历多页及数据处理。最后,文章强调了遵守网站规则和尊重隐私的重要性。
27 2
|
20天前
|
数据采集 定位技术 Python
Python爬虫IP代理技巧,让你不再为IP封禁烦恼了! 
本文介绍了Python爬虫应对IP封禁的策略,包括使用代理IP隐藏真实IP、选择稳定且数量充足的代理IP服务商、建立代理IP池增加爬虫效率、设置合理抓取频率以及运用验证码识别技术。这些方法能提升爬虫的稳定性和效率,降低被封禁风险。
|
22天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
22 0