分布式爬虫(四):大结局

  分布式爬虫之大结局篇:基于之前三篇博客配置的环境,缺一不可,若是漏了哪一步安装步骤,则可能存在运行报错问题。话不多说,抓紧时间结束这最后的分布式爬虫挣扎。

操作环境: Windows10、Python3.6、Pycharm2019.3.1、VMware15、Xshell6

相关文章: 分布式爬虫(一):配置虚拟机
      分布式爬虫(二):配置安装Python以及redis
      分布式爬虫(三):scrapy之中国网库


一、scrapy-redis

1.1、简介

  scrapy-redis是一个基于redis的scrapy组件,主要用于快速实现scrapy框架爬虫项目的分布式部署以及数据的采集,其原理如下图:
在这里插入图片描述


  scrapy-redis分布式爬取时启动多个服务端共享同一个redis队列的爬虫实例,多个爬虫实例将各自运行提取到或已请求的Requests在队列中统一进行登记,使得Scheduler在请求调度时能够对重复Requests进行过滤筛选,即保证已经由某一台爬虫实例请求过的Requests将不会再被其他爬虫实例重复请求。

  scrapy-redis爬虫实例以上一篇博客的中国网库为例,对商品数据进行数据采集。

  安装scrapy-redis

pip install scrapy-redis

1.2、修改scrapy

 要将一个Scrapy项目变成一个Scrapy-redis项目只需修改以下三点即可:

  1、将scrapy项目的爬虫文件spider_library.py中爬虫的类从scrapy.Spider变成scrapy_redis.spiders.RedisSpider;(或者是从scrapy.CrawlSpider变成scrapy_redis.spiders.RedisCrawlSpider。)

  2、将爬虫文件spider_library.py中的start_urls删掉,增加一个redis_key=“xxx”。这个redis_key是为了以后在redis中控制爬虫启动的。爬虫项目的第一个url,就是在redis中通过这个发送出去的
在这里插入图片描述
  3、在配置文件settings.py中添加如下配置:

# Scrapy-Redis相关配置
# 确保request存储到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"  # #指定队列

# 确保所有爬虫共享相同去的去重指纹
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'     # #定义一个去重的类

SCHEDULER_QUEUECLASS = 'scrapy_redis.queue.SpiderQueue'

# 在redis中保持scrapy-redis用到的队列,不会清理redis中的队列,从而可以实现暂停和恢复的功能
SCHEDULER_PERSIST = True

# 设置连接redis信息
REDIS_HOST = '192.168.2.133'	# 指定ip
REDIS_PORT = '6379'				# 端口号

1.3、模块迁移

  本次分布式爬虫项目小编打算使用一个本机Windows10系统 + 虚拟机Linux系统,所以爬虫项目文件代码已在windows10系统下写完,其项目所用到的模块也安装完全;若将此项目文件放到Linux系统中则无此项目所用到的模块。

  所以我们得使用命令pip freeze > requirements.txt将爬虫项目用到的模块迁移到requirements.txt文件中,以便Linux系统下载。

  第一步:cd切换到爬虫项目第一层文件名下;
  第二步:输入命令pip freeze > requirements.txt;或者Python -m pip freeze > requirements.txt即可。

如图所示:
在这里插入图片描述
在这里插入图片描述

二、virtualenv虚拟环境

  virtualenv优势:用来为一个应用创建一套“隔离”的Python运行环境,另外上线流程简单,大大减轻运维人员的出错率,比如每一个项目使用一个docker镜像,在镜像中去安装项目所需的环境,库版本等等

2.1、连接Xshell6

  打开VMware15软件,运行指定虚拟机,使用Xshell6软件连接虚拟机,查看是否连接成功:
在这里插入图片描述

2.2、安装virtualenv

安装步骤:
 1.安装虚拟环境

pip3 install virtualenv

在这里插入图片描述
 2.添加环境变量(否则创建虚拟环境的时候会出现:virtualenv 未找到命令。)
   (1)使用查找find / -name ‘virtualenv.py’ 是否存在
在这里插入图片描述
  (2)vi编辑文件/etc/profile;将内容PATH=$PATH:/usr/local/python3/bin写入文件最下面;Esc+;+Shift三键一起按,输入wq!(强制保存退出)。

vi /etc/profile

在这里插入图片描述
  (3)添加的进行生效命令source /etc/profile,最后查看是否添加成功echo $PATH

在这里插入图片描述

 3.创建虚拟环境spider:virtualenv -p python3 虚拟环境名

virtualenv -p python3 spider

在这里插入图片描述

 4.激活虚拟环境spider:source “虚拟环境名”/bin/activate

source spider/bin/activate

激活后,在控制台会有一个带有(spider)的标志,如下:
在这里插入图片描述

三、运行分布式项目

 至此,分布式爬虫项目需要用到的虚拟环境配置完成。

 接下来执行爬虫项目步骤:
  1、开启redis服务(注:cd切换到redis目录下)
   Windows系统下:redis-server.exe redis.windows.conf
   Linux系统下:redis-server

   连接redis数据库:redis-cli —> 连接本机
            redis-cli -h 192.168.2.133 -p 6379 —> 访问远程redis
在这里插入图片描述

  2、使用rz命令上传分布式爬虫项目文件压缩包。(注:若无此命令,即用yum install lrzsz下载插件)
在这里插入图片描述
  3、解压文件:China_library_reids.zip

unzip China_library_reids.zip

在这里插入图片描述
  4、下载之前迁移的项目库(requirements.txt)

pip3 install -r requirements.txt

  5、运行爬虫文件
   (1)、在爬虫服务器上,进入到爬虫文件所在的路径,然后输入命令:scrapy runspider [爬虫文件名]

scrapy runspider spider_library

进入等待传输开始爬取的url:
在这里插入图片描述

   (2)、在Redis服务器上,输入一个开始的url链接:

lpush spider_library:start_urls http://www.99114.com/

在这里插入图片描述
  6、双系统运行分布式爬虫项目,执行半小时:
在这里插入图片描述
查看数据量:25601条数据。
在这里插入图片描述

四、项目总结

  分布式爬虫项目带给目标网址的压力还是有的,刚刚持续爬了一个小时,才遭到中国网库的反爬机制:封ip。若有小伙伴想尝试分布式爬虫项目的话,可以自己上手实战,不过想要获取更多的数据量,还需购买代理ip,解决反爬措施。

  若两个爬虫实例不足以满足你的数据采集效率,可以在原先虚拟机的基础上克隆出几台完整链接虚拟机,修改配置网卡后一样可以执行爬虫项目。

  本次分布式爬虫项目到此结束,若有小伙伴有疑惑的地方,可在评论区留言,小编看到会尽快一一回复;此项目有需要改进的地方,也请大佬不吝赐教,感谢!

  “赠人玫瑰,手有余香”,看完的小伙伴记得点赞收藏,感谢!

  注:本项目仅用于学习用途,若用于商业用途,请自行负责!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值