热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scrapy-redis分布式爬虫使用详解

一、redis相关全称为remotedictionaryserver。国内使用到的公司也很多。其关键字可以归纳为:1.开源并以实际应用驱动。2.key-value这种KV特性将
一、redis相关

全称为remote dictionary server。国内使用到的公司也很多。

其关键字可以归纳为:

 

1.开源
并以实际应用驱动。
2.key-value
这种KV特性将其与关系型数据库本质的区别开来。这也是redis流行的关键因素所在。
3.内存数据库
这种将数据存储在内存中是redis性能(主要针对存取速度)优于硬盘数据库的根本。为了便于数据长久保存,其也支持持久化操作。

二. redis特性

1.丰富的数据类型与相应操作。每种数据类型都有特定的应用场景。
2.性能极高。
3.功能丰富。提供的进阶特性能够满足数据库使用需求。


三. redis数据结构

包括string/hash/list/set/zset,针对每种结构的使用情景可见文章:redis之其中武器。
hash特点就是在string基础上可实现单个key的多个filed的存储;list就不用说了,就是双向链表的特性。set就是集合,它和list的区别体现在value的有序性和唯一性上,操作上更贴近集合的概念,提供交集、并集等。zset相比set多了一个score项,并利用其实现value的排序。

四. redis进阶特性

1.事物。一组命令的集合。
2.生存时间。可用来实现缓存。
3.排序。
4.任务队列。
5.管道。


五. redis客户端

可以在redis官网上查看针对各个语言的客户端,所谓的客户端就是通过相应的语言接口实现对redis的操作。我是用的python,官方推荐redis-py,可通过pip install redis-py安装。

六. redis资料汇总

这里提供几个实时更新的汇总站。
首先就是redis位于GitHub上的repository的wiki(https://github.com/antirez/redis/wiki),上面提供了一些链接,并且你会发现一些是中文链接。在scrapy的wiki中也有这样的现象,你可以发现中国的用户量了吧。

其次是redis中文网站。

 

 

二、scrapy-redis实现scrapy分布式爬取分析的原理

scrapy-redis原理: 
1.spider解析下载器下载下来的response,返回item或者是links 
2.item或者links经过spidermiddleware的process_spider_out()方法,交给engine。 
3.engine将item交给itempipeline,将links交给调度器 
4.在调度器中,先将request对象利用scrapy内置的指纹函数,生成一个指纹对象 
5.如果request对象中的dont_filter参数设置为False,并且该request对象的指纹不在信息指纹的队列中,那么就把该request对象放到优先级的队列中 
6.从优先级队列中获取request对象,交给engine 
7.engine将request对象交给下载器下载,期间会通过downloadmiddleware的process_request()方法 
8.下载器完成下载,获得response对象,将该对象交给engine,期间会通过downloadmiddleware的process_response()方法 
9.engine将获得的response对象交给spider进行解析,期间会经过spidermiddleware的process_spider_input()方法 
10.从第一步开始循环

上面的十个步骤就是scrapy-redis的整体框架,与scrapy相差无几。本质的区别就是,将scrapy的内置的去重的队列和待抓取的request队列换成了redis的集合。就这一个小小的改动,就使得了scrapy-redis支持了分布式抓取。

 三、需要用到的模块 

scrapy 
scrapy-redis 
redis 
mysql :收集来的数据存放到mysql中
python的mysqldb模块 
python的redis模块 
  后面俩个库:python不能直接操作数据库,需要通过库来支持。而这2个就是相应数据库的支持库。
  结构化数据可以使用mysql节省空间,非结构化、文本等数据可以采用mongodb等非关系型数据提高访问速度。
 
 
参考文章来源:
http://blog.csdn.net/u012150179/article/details/38077851
http://blog.csdn.net/howtogetout/article/details/51633814

推荐阅读
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 基于SSM框架的在线考试系统:随机组卷功能详解
    本文深入探讨了基于SSM(Spring, Spring MVC, MyBatis)框架构建的在线考试系统中,随机组卷功能的设计与实现方法。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文详细介绍如何在华为鲲鹏平台上构建和使用适配ARM架构的Redis Docker镜像,解决常见错误并提供优化建议。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • GreenPlum采纳ShareNothing的架构,良好的施展了便宜PC的作用。自此IO不在是DW(datawarehouse)的瓶颈,相同网络的压力会大很多。然而GreenPlum的查问优化策略可能防止尽量少的网络替换。对于首次接触GreenPlum的人来说,必定耳目一新。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
author-avatar
致力于流浪动物救助量
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有