9-1 分布式爬虫要点

1.分布式的优点

  • 充分利用多机器的宽带加速爬取
  • 充分利用多机的IP加速爬取速度

问:为什么scrapy不支持分布式?

答:在scrapy中scheduler是运行在队列的,而队列是在单机内存中的,服务器上爬虫是无法利用内存的队列做任何处理,所以scrapy不支持分布式。

2.分布式需要解决的问题

  • requests队列集中管理
  • 去重集中管理

所以要用redis来解决。

9-2~3 redis基础知识

Ⅰ.redis的安装(windows 64位)

1.百度:redis for windows 找到github上的安装包

如图点进去下载

cmd切换到下载的目录中

输入以下命令即可运行

这样已经启动了,可以输入相关的命令进行测试。

Ⅱ、Redis的数据类型

  • 字符串
  • 散列/哈希
  • 列表
  • 集合
  • 可排序集合

1.字符串命令

set mykey ''cnblogs''   创建变量

get mykey   查看变量

getrange mykey start end   获取字符串,如:get name 2 5 #获取name2~5的字符串

strlen mykey   获取长度

incr/decr mykey    加一减一,类型是int

append mykey ''com''   添加字符串,添加到末尾

2.哈希命令

hset myhash name "cnblogs"   创建变量,myhash类似于变量名,name类似于key,"cnblogs"类似于values

hgetall myhash   得到key和values两者

hget myhash  name  得到values

hexists myhash name  检查是否存在这个key

hdel myhash name   删除这个key

hkeys myhash   查看key

hvals muhash   查看values

3.列表命令

lpush/rpush mylist "cnblogs"  左添加/右添加值

lrange mylist 0 10   查看列表0~10的值

blpop/brpop key1[key2] timeout   左删除/右删除一个,timeout是如果没有key,等待设置的时间后结束。

lpop/rpop key   左删除/右删除,没有等待时间。

llen key  获得长度

lindex key index    取第index元素,index是从0开始的

4.集合命令(不重复)

sadd myset "cnblogs"   添加内容,返回1表示不存在,0表示存在

scard key  查看set中的值

sdiff key1 [key2]   2个set做减法,其实就是减去了交际部分

sinter key1 [key2]    2个set做加法,其实就是留下了两者的交集

spop key   随机删除值

srandmember key member  随机获取member个值

smember key   获取全部的元素

5.可排序集合命令

zadd myset 0 ‘project1’ [1 ‘project2’]   添加集合元素;中括号是没有的,在这里是便于理解

zrangebyscore myset 0 100   选取分数在0~100的元素

zcount key min max   选取分数在min~max的元素的个数

Ⅲ、Redis文档

  1. redis教程(菜鸟教程)
  2. redis命令参数

9-4~9 全部的小节主要是解读scrapy-redis

可以看github上的scrapy-redis的使用方法。

bloomfilter 布隆过滤器 集成到scrapy-redis中。

源码还没有理解透彻,先不写说明了。


相关代码的请移步我的github:scrapy-redis应用的项目

作者:今孝
出处:http://www.cnblogs.com/jinxiao-pu/p/6838011.html 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

觉得好就点个推荐把!

第9章 scrapy-redis分布式爬虫的更多相关文章

  1. Scrapy 框架 分布式 爬虫

    分布式 爬虫 scrapy-redis 实现 原生scrapy 无法实现 分布式 调度器和管道无法被分布式机群共享 环境安装 - pip install scrapy_redis 导包:from sc ...

  2. scrapy简单分布式爬虫

    经过一段时间的折腾,终于整明白scrapy分布式是怎么个搞法了,特记录一点心得. 虽然scrapy能做的事情很多,但是要做到大规模的分布式应用则捉襟见肘.有能人改变了scrapy的队列调度,将起始的网 ...

  3. scrapy进行分布式爬虫

    今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一 ...

  4. 16 Scrapy之分布式爬虫

    redis分布式部署 1.scrapy框架是否可以自己实现分布式? - 不可以.原因有二. 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls ...

  5. scrapy补充-分布式爬虫

    spiders 介绍:在项目中是创建爬虫程序的py文件 #1.Spiders是由一系列类(定义了一个网址或一组网址将被爬取)组成,具体包括如何执行爬取任务并且如何从页面中提取结构化的数据. #2.换句 ...

  6. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  7. 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  8. 爬虫--scrapy+redis分布式爬取58同城北京全站租房数据

    作业需求: 1.基于Spider或者CrawlSpider进行租房信息的爬取 2.本机搭建分布式环境对租房信息进行爬取 3.搭建多台机器的分布式环境,多台机器同时进行租房数据爬取 建议:用Pychar ...

  9. 基于scrapy的分布式爬虫抓取新浪微博个人信息和微博内容存入MySQL

    为了学习机器学习深度学习和文本挖掘方面的知识,需要获取一定的数据,新浪微博的大量数据可以作为此次研究历程的对象 一.环境准备   python 2.7  scrapy框架的部署(可以查看上一篇博客的简 ...

  10. 第7章 Scrapy突破反爬虫的限制

    7-1 爬虫和反爬的对抗过程以及策略 Ⅰ.爬虫和反爬虫基本概念 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法. 误伤:反爬虫技术将普通用户识别为爬虫,如果误 ...

随机推荐

  1. django系列5.5--分组查询,聚合查询,F查询,Q查询,脚本中调用django环境

    一.聚合查询 aggregate(*args, **args) 先引入需要的包,再使用聚合查询 #计算所有图书的平均价格 from django.db.models import Avg Book.o ...

  2. 栈实现 C语言

    最近上来写了一下栈,理解数据结构的栈. 头文件:stack.h 初始化栈结构与函数定义: #include<stdlib.h> #include <stdio.h> #incl ...

  3. LOJ#6504. 「雅礼集训 2018 Day5」Convex(回滚莫队)

    题面 传送门 题解 因为并不强制在线,我们可以考虑莫队 然而莫队的时候有个问题,删除很简单,除去它和前驱后继的贡献即可.但是插入的话却要找到前驱后继再插入,非常麻烦 那么我们把它变成只删除的回滚莫队就 ...

  4. 基于Dubbo的Hessian协议实现远程调用

    Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行远程调用,也就是说,服务调用方需要使用Java语言来基于Dubbo调用提供方服务, ...

  5. linux下安装nginx,centos安装nginx

    初学nginx,进行简单的安装和配置. 一.依赖 openssl-fips-2.0.9.tar.gz zlib-1.2.11.tar.gz pcre-8.01.tar.gz nginx-1.8.0.t ...

  6. C++实现二叉树的相应操作

    1. 二叉树的遍历:先序(递归.非递归),中序(递归.非递归),后序(递归.非递归). #include <iostream> #include <string> #inclu ...

  7. Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.******.seashell.bpc.query.query.service.FscBankPayCodeQueryService

    2019-03-19 16:22:14,945 WARN [main] (org.springframework.context.support.AbstractApplicationContext. ...

  8. Java_日志接口实现

    日志的接口实现:改用slf4j实现日志功能 为什么要使用slf4j,而不是用log4j或者其他日志框架? 因为slf4j只是规定了一堆实现了日志的接口,并不关心日志怎么实现,这样就可以让项目脱离对日志 ...

  9. 架构师养成记--31.Redis的几种类型

    String类型 Redis一共分为五种基本数据类型:String.Hash.List.Set.ZSet String类型是包含很多张类型的特殊类型,并且是二进制安全的.比如对序列化的对象进行存储,比 ...

  10. 禅道与bugfree区别

    bugfree更偏重bug管理, 禅道是以项目管理为目标, 所以出发点不一样. 我们bug追踪管理使用bugfree,项目管理计划使用禅道,配置管理使用svn bugfree很low,安装需要环境特别 ...