笔记十四:基于scrapy_redis部署的scrapy分布式爬虫

2 篇文章 0 订阅
1 篇文章 0 订阅

大家都知道scrapy是一个快速高效爬去网页信息的爬虫框架,但是当面对大量的信息大量的url(几千几万等以上),用一个服务器爬还是很慢的,所以尼就出现了一个项目多个服务器共同爬去的方法,就是分布式,即主从服务器,一个主机控制运行暂停等操作,多个从属服务器爬去数据,从属服务器只是用来帮忙爬去数据,从主机服务器那里拿url,再返回响应(包含信息或者新的url),那每个从属服务器每次拿的url怎么保证不一样,也就是说不爬去重复的数据或者重复的url,scrapy_redis就可以避免这个问题,那redis是什么东西尼?redis是一个非关系性数据库,内部是key_values存储系统。redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

那scrapy_redis是怎么用和部署尼?

1.首先下载安装包scrapy_redis

(如果想使用的虚拟环境练习这个分布式,需要进入虚拟环境再下载这个包)

 2.配置你要使用分布式项目的相关setting配置

配置1:调度器使用scrapy_redis的调度器,因为redis的调度器可以防止有重复的url

配置2:调用redis中的去重类,以防url重复

两个配置如下箭头所指:

3.修改你的爬虫文件

首先因为这里我们用的是redis的爬虫所以要把scrapy_redis中的RedisSpider引入,并把爬虫类的父类修改为redis的类

还有一点就是start_urls我们不再需要,因为redis用的redis_key获取url,所以我们在注释start_urls后,不要忘记加上一句:redis_key='key:starts_urls',  key处可以随意填,但是最好是项目有关名字,后面会用到,当爬虫文件执行时,该redis_key会被自动调用,从redis里自动获取url地址,所以配置如下图所示!

4:如果你想让其他服务器连接到你的数据库例如mysql你的开启mysql,一般情况下,本机的mysql是关闭的,你可以点开自己的本机里面的mysql,在mysql里面找到user,里面host列root对应的那个应该填写时localhost,把这个改为%,意思是可以被其他远程服务器连接,ctrl+s保存一下,然后右击‘本机’,里面有一个有选项的‘刷新’,刷新里点击’权限‘,并且点击弹出的小框的’确定‘。过程如下:

 

 

 5:然后我们要配置一下存数据的数据库,下面我写了两个数据库配置即mysql和redis

6:cmd启动redis,找到redis目录下,然后启动redis服务:redis-server.exe redis.windows.conf

如果出现如下的错误,登陆:redis-cli  然后shutdown 最后退出exit  这样再重新执行启动命令出现如下大图案就对了

7:然后把该项目发给其他服务器,还有别的电脑上的redis如果想要访问你的redis,你的redis就需要解除保护模式,即登陆redis-cli然后输入config set protected-mode "no" 如图所示:

 还有就是你的redis文件里的redis.winddows.conf文件里有一个bind要改为0.0.0.0意思是让所有人可以访问到你的redis,如下所示:

 然后你的防火墙记得一点要关闭,不然别人一样不能访问连接你的redis

最后你可以让其他电脑redis测试连接一下你的地址,出现如下情况即成功连接:

 8:如果是你的服务器作为从属服务器,去帮忙别人的服务器爬去,连接别人的数据库即:

 9:最后让其他服务器运行项目,然后你进入redis运行添加爬虫地址,即刚才的start_urls(redis服务必须在启动着即上面的第六步)

先连接本地redis客户端:redis-cli.exe

添加爬虫地址:lpush recri:start_urls https://www.liepin.com/zhaopin/?sfrom=click-pc_homepage-centre_searchbox-search_new&d_sfrom=search_fp&key=python

就是 lpush  加上 刚刚爬虫文件里配置的redis_key 再加上注释掉的起始url地址

最后出现integer就对了,后面的数字代表的是添加的urls的个数  如下所示:

然后每一台连接的电脑都会有数据出来(除非你的url太少,一个电脑就够了,可以多添加点url让电脑跑起来),而且每个电脑爬去的数据是不一样的哦!!

上述就是实现分布式爬虫的大致过程了,但是很明显有我们这样做还是有点麻烦,要把我们的项目发给我们的其他集群,那么怎么才能让我们的项目不用传输就能一起运行爬去尼?没错就是scrapyd与gerapy的结合!下一个笔记再更新!

上述内容纯属自己上课学完下课总结的,所以很有可能有错误或者解释不到位,请大神看到在评论区指教,谢谢!

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值