分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度。

在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queue去重和set集合都是在本机上创建的,其他的电脑无法访问另外一台电脑上的内存的内容;想要让多台机器共用一个queue队列和set集合,可以让scrapy结合scrapy_redis来完成。

要实现分布式爬虫,首先要配置服务器主从:

配置主从的目的:

1、达到一个备份的功能,一旦master出现崩溃,而数据库中还有数据的话

可以将其中的一个slave重新设置为主服务器,从而恢复Redis的正常运行

2、一个Redis服务器负责读写,性能较低,通过主从来减轻一个Redis的压力

scrapy 和scrapy-redis的关系

scrapy-redis 与 Scrapy的关系就像电脑与固态硬盘一样,是电脑中的一个插件,能让电脑更快的运行。

Scrapy 是一个爬虫框架,scrapy-redis 则是这个框架上可以选择的插件,它可以让爬虫跑的更快。

为什么使用 scrapy-redis

首先,在实际开发中,我们总会对爬虫速度表示不满,为啥这么慢,能不能跑快点。除了爬虫本身的优化,我们就要引入分布式爬虫的概念。Scrapy本身是不支持分布式的,因为它的任务管理和去重全部是在机器内存中实现的。

我自己对分布式爬虫的理解就是:多个爬虫执行同一个任务

在 Scrapy 中最出名的分布式插件就是scrapy-redis了,scrapy-redis的作用就是让你的爬虫快、更快、超级快。

分布式爬虫的实现

1.redis 服务

2.确保scrapy-redis 环境已经安装

3.确定单机scrapy 能够正常运行

4.配置setting.py 文件

setting.py 配置代码如下

# url指纹过滤器

'DUPEFILTER_CLASS' : "scrapy_redis.dupefilter.RFPDupeFilter",

# 调度器

'SCHEDULER' : "scrapy_redis.scheduler.Scheduler",

# 设置爬虫是否可以中断

'SCHEDULER_PERSIST' : True,

'SCHEDULER_QUEUE_CLASS' : "scrapy_redis.queue.SpiderQueue", # 按照队列模式

# redis 连接配置

'REDIS_HOST' : '10.15.112.29',

'REDIS_PORT' :6379,

#密码和选择的库号

'REDID_PARAMS' = {

'password': '12324345',

'db' : 0,

}

## 配置redis管道文件,权重数字相对最大

'ITEM_PIPELINES' = {

'scrapy_redis.pipelines.RedisPipeline': 3, # redis管道文件,自动把数据加载到redis

}

SCHEDULER是任务分发与调度,把所有的爬虫开始的请求都放在redis里面,所有爬虫都去redis里面读取请求。 DUPEFILTER_CLASS是去重队列,负责所有请求的去重,REDIS_START_URLS_AS_SET指的是使用redis里面的set类型(简单完成去重),如果你没有设置,默认会选用list。

5 接下来就是设置你的爬虫文件了

在spider文件下找你写好的爬虫文件

然后导入

from scrapy_redis.spiders import RedisCrawlSpider

你的class类要继承RedisCrawlSpider

class BosszpSpider(RedisCrawlSpider):

然后设置属性

设置爬虫的rediskey(这个个自己取名,要和redis的键名一样)

redis_key = 'boss_url'

接下来连接redis

启动redis的命令是redis-server /etc/redis.cfon

l连接好redis后,添加一个列表

键名就是你爬虫属性里设置的名字

值就是你首次请求的url

配置完后就可以启动你的爬虫了

命令 scrapy runspider 爬虫文件名

scrapy-redis 优点

速度快

scrapy-redis 使用redis这个速度非常快的非关系型(NoSQL)内存键值数据库,速度快是最重要原因(但是也会产生负面想过,下面会说到)。

为什么是scrapy-redis而不是scrapy-mongo呢,大家可以仔细想想。

用法简单

前人已经造好轮子了,scrapy-redis。 我们直接拿来用就好,而用法也像上面提到的在 settings.py 文件中配置。在文档中还有另一种用法,即Feeding a Spider from Redis

run the spider: scrapy runspider myspider.py

push urls to redis: redis-cli lpush myspider:start_urls http://google.com(建议把lpush换为zset)

其实这种用法就是先打开一个爬虫,他会一直在redis里面寻找key为 myspider:start_urls,如果存在,就提取里面的url。当然你也可以在爬虫中指定redis_key,默认的是爬虫的名字加上:start_urls

去重简单

爬虫中去重是一件大事,使用了scrapy-redis后就很简单了。上面提到过使用redis的set类型就可以很容易达到这个目标了,即REDIS_START_URLS_AS_SET = True。

scrapy-redis 缺点

内存问题

为什么使用分布式爬虫,当然是因为会有很多链接需要跑,或者说会存放很多个myspider:start_urls到redis中,Redis是key-value数据库,面对key的内存搜索,优势明显,但是Redis吃的是纯内存

分布式爬虫的部署

1.下载scrapy_redis模块包

2.打开自己的爬虫项目,找到settings文件,配置scrapy项目使用的调度器及过滤器

3.修改自己的爬虫文件

4.如果连接的有远程服务,例如MySQL,Redis等,需要将远程服务连接开启,保证在其他主机上能够成功连接

5.配置远程连接的MySQL及redis地址

6.上面的工作做完以后,开启我们的redis服务器

进入到redis文件下打开我们的cmd窗口:输入:redis-server redis.windows.conf

如果出现错误:# Creating Server TCP listening socket 127.0.0.1:6379: bind: No error

解决方法:在命令行中运行

redis-cli

127.0.0.1:6379>shutdown

not connected>exit

然后重新运行redis-server redis.windows.conf,启动成功!

7.修改redis.windows.conf配置文件,修改内容如下:

# 配置远程IP地址,供其他的电脑进行连接redis

bind: (当前电脑IP) (192.168.40.217)

# 关闭redis保护模式

protected-mode: no

8.所有爬虫都启动之后,部署redis-server服务的电脑再打开一个命令窗口,输入redis-cli.exe -h 127.0.0.1(如果是自己的ip改成自己的IP地址) -p 6379连上服务端

9.连上之后会有127.0.0.1:6379>这样的字样提示,然后输入如下命令

10.lpush 爬虫文件里面自己定义的爬虫名字:start_urls 爬虫的网址

12.数据写不进去数据库里面:

修改MySQL的my.ini文件,以MySQL8为例

路径在C:\ProgramData\MySQL\MySQL Server 8.0

找到sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"这一行

把里面的STRICT_TRANS_TABLES,删除,逗号也删除,保存文件

修改过之后需要重启mysql服务

在windows命令窗口中使用net stop mysql80先停止服务,再使用net start mysql80启动服务

如果my.ini文件不修改,爬虫的数据写入不了数据库

python爬虫要安装什么_python爬虫之分布式爬虫和部署相关推荐

  1. python爬虫实训日志_Python学习学习日志——爬虫《第一篇》(BeautifulSoup)

    爬虫简介(学习日志第一篇) 一.爬虫介绍 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Pyyhon爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.U ...

  2. python之pygame安装教程_Python中pygame安装方法图文详解

    搜索热词 本文实例讲述了Python中pygame安装方法.分享给大家供大家参考,具体如下: 这里主要描述一下我们怎样来安装pygame 可能很多人像我一样,发现了pygame是个好东东,但是就是不知 ...

  3. python pip下载安装教程_Python下的常用下载安装工具pip的安装方法

    1.pip下载安装1.1 pip下载 # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=8 ...

  4. python第三方模块安装路径_Python第三方Window模块文件的几种安装方法

    python安装第三方模块 使用软件管理工具pip python自带了包管理工具,就像手机app商城,91助手等软件的功能一样. python2与python3安装模块的方法相似,值得注意的是,你在p ...

  5. python库的安装方法_Python库的安装方法

    Python库的安装方法 Python的解释器CPython是开源的,我们可以下载查看其源代码,同时,Python语言的各种库也都是开源的.利用Python语言编程,可用的库有很多,在Python官方 ...

  6. 三十五 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy分布式爬虫要点

    1.分布式爬虫原理 2.分布式爬虫优点 3.分布式爬虫需要解决的问题 转载于:https://www.cnblogs.com/meng-wei-zhi/p/8182813.html

  7. python爬虫优势和缺点_三种分布式爬虫策略的优缺点

    三种分布式爬虫策略: (1)Slaver端从Master端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务分配给Master端.Master端只有一个Redi ...

  8. python爬虫网页数据案例_python+vue实现网站爬虫数据分析案例

    项目描述 基础环境:python + flask + vue + element-ui + echarts python_spiders -- 爬虫后台项目 python_spiders_web -- ...

  9. python爬虫反爬机制_Python Scrapy突破反爬虫机制(项目实践)

    对于 BOSS 直聘这种网站,当程序请求网页后,服务器响应内容包含了整个页面的 HTML 源代码,这样就可以使用爬虫来爬取数据.但有些网站做了一些"反爬虫"处理,其网页内容不是静态 ...

最新文章

  1. 转元组 python_Python基础教程,第三讲,列表和元组
  2. Python6:oriented objective programming
  3. mr图像翻转的原因_MR图像质量与成像参数的相关性及控制对策
  4. ubuntu: no module named _sqlite
  5. Jmeter中一些概念的理解——90%响应时间、事务、并发
  6. Xmanager企业版激活成功全过程
  7. python单行注释用什么符号_Python多行注释和单行注释用法说明
  8. slf4j mysql_能显示sql语句,没有报错,但是MySQL里没有表?还有,slf4j是必须的吗?...
  9. Hdu-5053 the Sum of Cube(水题)
  10. 从数据流角度管窥 Moya 的实现(二):处理响应
  11. vagrant给vmbox创建虚拟机及docker安装mysql和redis
  12. WindowsXP系统安装
  13. 写给在校的GISER
  14. c语言调用oracle存储过程,Oracle存储过程
  15. 程序员应该多久跳槽一次?为何贵圈跳槽如此频繁?
  16. 部分国外顶级会议论文没有关键词
  17. 抽象类含有构造器吗?
  18. Spring工具包下载
  19. 我国AGV工业编年史(图谱)从1975年第一台磁导航AGV开始
  20. 音视频传输协议众多, 5G时代不同业务应该如何选择?

热门文章

  1. MuPlayer『百度音乐播放内核』
  2. ViewDragHelper详解
  3. MongoDB 安装与启动
  4. Linux 命令(125)—— vmstat 命令
  5. C++ 接口继承与实现继承的区别和选择
  6. bzoj 3745 [Coci2015]Norma——序列分治
  7. iOS原生混合RN开发最佳实践
  8. description----NSData To NSString
  9. RabbitMQ的Android端接收
  10. 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题