爬虫运行成功但没数据_我整来了几台服务器,就是为了给你演示一下分布式爬虫的整个过程...

一般情况下
scrapy是这样的

1bbad2ba72a863c5a7fb2552c1be8495.png


可以看到1、调度器 Scheduler 会调度 Requests 队列中的请求2、然后将每个请求交给下载器 Downloader 下载3、这时候就会得到相应的 item 数据交给 item Pipeline 处理
如果我们希望有多个爬虫
来爬取一个网站的数据
那么我们的请求队列就要共享而不能说都是 Request 队列要不然爬到的数据就都乱套了

77239ad8156a99fa3b02b118577bb5e5.png


所以我们需要一个共享的队列
就比如说你希望一块蛋糕能被快速吃掉
你叫来了小明
可是小明只有一张嘴啊
于是你又叫来了他的 py 们小红和小紫

e7236f5c7e6e4c0f3cd6a2dba64fe712.png


但是你总不能说给他们每人各一块蛋糕吧
你是希望一块蛋糕被快速吃掉
你要他们 3 张嘴一起吃掉 同一块蛋糕
你把他们的嘴比作爬虫
把蛋糕比作要爬取的网站
是不是就比较容易理解了

313f9978f2599aea8464765098806348.gif


那么多个爬虫如何共享一个请求队列以及如何搭建分布式部署爬虫呢
接下来就是学习 Python 的正确姿势

88c54b6e383907acbb0ca1b6f1b5ba84.png


我们需要用到 redis 队列来共享
巧的是scrapy-redis这个库就可以使用 redis 队列

f1c03637957f18a30221c32c728d95a8.png


在此之前我们先搞几台服务器一台用来搭建 redis一台用来搭建数据库再搞三台来运行爬虫
服务器买起

e5c6003cdfa7d94e1123421c14107cd7.png


别问我哪来这么多服务器
有钱任性(良心帅b喊起来)

cfd9875431783b7ec5089ce264849fb8.png


服务器有了搭建起来呗先把 redis 装上
连接到 redis 服务器

e7811b643e5ad808e8e7a4d9ba587184.png


下载 redis

51152e61df62d9d982a46f5f6730d202.png


解压到 /usr/local 下

360aba9d031befe23b41476a93c6ed8e.png


解压完之后
进入

fba77a931cf5f9ca9671142ab62ea852.png


安装一波

df51ea44d3313e1a264c8251c6779c89.png


安装完之后可以顺便复制一下 redis 所需的配置文件

afde4e0bd78afd4f8c08dd8e3c7dee1c.png


接着进入 bin 目录

a52ee2382ab82bfc170f6f6f5d39c91c.png


启动 redis

869a00b6844df09d154636c52226cef1.png


没毛病
使用本地连接一下

26b1e2657ef8877e1e5a23bd2049c806.png


恩~连上了

5521afc9873f48980a463f2626a802db.png


redis 搭建完
接着我们来搭建数据库的服务器把 MongoDB 给装上
先连接到数据库的服务器上

2254b32bf92c0d28d5504b9ae6c70fc2.png


下载 mongoDB

649c756a07f6e886afad5fb1cafce116.png


解压一波

53c6cd856a3bc8aa44912b579f26b5fb.png


把解压下来的文件夹
轻轻的移动一下位置

befd01a7a3aefaa378bfa2a76d7d1da2.png


创建个 db 文件夹

371471204facab2d4160f35a4c44b0fb.png


开启 mongodb
这里顺便把 bind_ip 设置一下
这样才能被远程访问

7e484186268d155967f6970110474436.png


往下拉可以看到
mongoDB 监听的是 27017 端口
说明安装和启动成功

5b2251c611ba822e5cfe1f1b4d7b3332.png


使用本地连接试试

32f27d1886c8cf501db81e5bf1f6fef4.png


可以可以

98f771d8260df28c22650ed95694e1ed.png


接着我们需要在
爬虫服务器安装 Python3 环境

bc91de9ba82cdd5e60c3ee151bfe74f8.png

d75f05c34acc75c478f0f9db1eb2a941.png


slave-02 和 slave-03 服务器
同上安装 python3

e3c1380a85aa95a3339f03adb5a08155.png


ok
环境搭起来了

d8fc859db277662b7450f73691338815.png


回到我们之前写的代码
使用 scrapy 爬取 stackoverflow 上的所有 Python 问答
我们把它改成适用分布式的
将 Pipeline 中的数据库地址配置成
我们创建的 mongodb 数据库地址

c742cd95b4d238cc79df533be55f09d5.png


接着在 setting 中配置
redis 调度和去重

f163cffaa7d8406a6437c11fc18f4ddb.png


再设置一下延迟访问

281e6aa8f951212dfed9b65ebfc9b9e1.png


搞完了之后
将虚拟环境中的库打包一下

a3736ab387f0254091a4dc93df9ed82d.png

cb6e38e97aa101399e1cc7f46d417eb0.png


接着把项目
都扔到爬虫服务器上去

feaa6aefaaf290418d2d8338b9b30247.png


连接到爬虫服务器
可以看到刚刚传来的文件

ebfe038c1a38142c555086d5959d766e.png


把刚刚在虚拟环境中
生成的第三方库列表
在服务器上一顿安装

584c06e2865169306051c40ba8625d60.png


其它两台爬虫服务器
和上面一样安装所需要的库
都安装完之后
就终于可以都 TM 跑起来了

bfea5f6bd4d18d3e0755b614884e9c3c.png


所有的爬虫
都特么给我跑起来

271e65f2edea34a6cbb711e4f971b0b9.png


哈哈哈哈哈
4台机器开始一顿爬取

4e113af4ab9214f6e39d9627d4cce9cc.png


可以看到 mongodb 都监听到了
这几台服务器的连接了

bdc044e7259509e4d11a9b0eb137cef3.png


我们连到 redis 看看

74ef4bd325502563f4b84f12286ff232.png


可以看到
redis 在调度着请求的消息队列
以及过滤重复的请求
再连接到 mongodb 看看

72f8feda4ffaecbe799b671949b5fa78.png

b1f5430108737cf7928728976e090f0f.png


小帅b每隔一小会就查询一下
爬取下来的数量
可以看到
速度还是可以的

1b782654d2352af2347df9b38cb1f579.gif


ok
以上就是分布式爬虫的
搭建及部署的过程了
当然了
数据库还可以搭建一下集群
数据库之间的连接最好设置账户
进行安全访问等
主要还是让你了解这个过程中
分布式爬虫的搭建和使用
以及体会它的可扩展性和高效性
那么咱们就到这里了
我们下回见,peace

31c2b733fb55e78fd7c4701046431320.gif

扫一扫学习 Python 没烦恼

55b53d613531a5ef6f8c74c4fd6a2006.png


阅读原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值