阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis将任务队列push进redis
Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个服务器的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。
而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
说白了,就是使用redis来维护一个url队列,然后scrapy爬虫都连接这一个redis获取url,且当爬虫在redis处拿走了一个url后,redis会将这个url从队列中清除,保证不会被2个爬虫拿到同一个url,即使可能2个爬虫同时请求拿到同一个url,在返回结果的时候redis还会再做一次去重处理,所以这样就能达到分布式效果,我们拿一台主机做redis 队列,然后在其他主机上运行爬虫.且scrapy-redis会一直保持与redis的连接,所以即使当redis 队列中没有了url,爬虫会定时刷新请求,一旦当队列中有新的url后,爬虫就立即开始继续爬
首先分别在主机和从机上安装需要的爬虫库
pip3 install requests scrapy scrapy-redis redis
在主机中安装redis
点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。
安装redis
yum install redis
启动服务
systemctl start redis
查看版本号
redis-cli --version
设置开机启动
systemctl enable redis.service
修改redis配置文件 vim /etc/redis.conf 将保护模式设为no,同时注释掉bind,为了可以远程访问,另外需要注意阿里云安全策略也需要暴露6379端口
改完配置后,别忘了重启服务才能生效
systemctl restart redis
然后分别新建爬虫项目
scrapy startproject myspider
在项目的spiders目录下新建test.py
点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。
导包
import scrapy
import os
from scrapy_redis.spiders import RedisSpider
定义抓取类
class Test(scrapy.Spider):
class Test(RedisSpider):
#定义爬虫名称,和命令行运行时的名称吻合
name = "test"
定义redis的key
redis_key = 'test:start_urls'
定义头部信息
haders = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36'
}
def parse(self, response):
print(response.url) pass
然后修改配置文件settings.py,增加下面的配置,其中redis地址就是在主机中配置好的redis地址:
BOT_NAME = 'myspider'
SPIDER_MODULES = ['myspider.spiders']
NEWSPIDER_MODULE = 'myspider.spiders'
点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。
设置中文编码
FEED_EXPORT_ENCODING = 'utf-8'
scrapy-redis 主机地址
REDIS_URL = 'redis://root@39.106.228.179:6379'
队列调度
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
不清除缓存
SCHEDULER_PERSIST = True
通过redis去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
点我领取阿里云2000元代金券,(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。
不遵循robots
ROBOTSTXT_OBEY = False
最后,可以在两台主机上分别启动scrapy服务
此时,服务已经起来了,只不过redis队列中没有任务,在等待状态
进入主机的redis
redis-cli
将任务队列push进redis
lpush test:start_urls http://baidu.com
lpush test:start_urls http://chouti.com
可以看到,两台服务器的爬虫服务分别领取了队列中的任务进行抓取,同时利用redis的特性,url不会重复抓取
爬取任务结束之后,可以通过flushdb命令来清除地址指纹,这样就可以再次抓取历史地址了。
阿里云服务器:活动地址
购买可领取:阿里云代金券
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Delta Lake,让你从复杂的Lambda架构中解放出来
作者介绍李潇,现就职于 Databricks,管理两跨国团队,专注于 Apache Spark, Databricks Runtime 和 Koalas 的开发和建设。他是 Apache Spark 项目管理委员会成员。本科毕业于南京理工大学,后在佛罗里达大学(University of Florida)获计算机博士学位, 曾就职于 IBM,获发明大师称号(Master Inventor),在数据处理领域发表专利十余篇。(Github: gatorsmile) 本文转自公众号:AI前线原文链接:https://mp.weixin.qq.com/s/ZNwW4L6JiusQ1S0BSmVj8g 今天我跟大家分享 一下 Data Lake 和 Delta 架构。 2019 年 10 月 16 日,在荷兰阿姆斯特丹举行的 Spark+AI
- 下一篇
英特尔傲腾持久内存延迟比DRAM差多少?
2019年4月份,英特尔发布了傲腾数据中心持久内存,这是一款具有字节寻址能力的非易失性内存,能被操作系统识别为主内存,英特尔表示,作为主内存其性能表现与DRAM内存相近,究竟有多相近呢? 最近,日本国家先进工业科学技术研究所(AIST)发布了一篇Paper,非常细致的将傲腾持久内存与DRAM内存进行了一番对比,测出傲腾数据中心持久内存延迟是DRAM的四倍。 简介:傲腾数据中心级持久内存 值得小伙伴们注意的是2019年发布的傲腾数据中心持久内存(Optane DCPMM)跟2017年发布的傲腾内存(Optane Memory)可不一样。 傲腾内存(Optane Memory)是插在PCIe NVMe接口上的,而傲腾数据中心持久内存(Optane DCPMM)是插在DIMM上的,如果设置的是App Direct模式的话,CPU就完全把他认作主内存了。 众所周知,傲腾是基于3D Xpoint介质的,3D Xpoint是英特尔跟美光联合研发的产物,在英特尔手里,傲腾被打造成介于低成本NAND和有易失性的DRAM内存之间的方案。 傲腾发布以来引起了许多OEM厂商的兴趣,不过,目前傲腾只能支持自家...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7