构造分布式Scrapy_redis爬虫,爬取新浪新闻sina整站的新闻文章-day2

编写setting.py文件,写好相关的配置就可以运行

- 配置文件需要修改的并不多,下面**只把需要修改或添加的代码**贴进来 ~~~ # 使用scrapy-redis的url指纹去重,不使用scrapy默认去重 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

使用scrapy-redis里的调度器组件,不使用默认的scrapy调度器

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

设置暂停,redis请求记录不会丢失

SCHEDULER_PERSIST = True

添加master端的redis host 和 port,这个是发送lpush命令的主机ip和端口号

如果不写,会默认将数据存在本地的redis

如果需要将数据存到远程主机,需要将远程主机redis的配置文件中的 bind 127.0.0.1注释掉

REDIS_HOST = '192.168.31.143'
REDIS_PORT = 6379

Request请求的队列形式 请求先进先出,不写这一句就使用scrapy的默认队列形式

SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"

设置下载延时1秒,这也是常见的反反爬手段之一

DOWNLOAD_DELAY = 1

加上一个user-agent

DEFAULT_REQUEST_HEADERS = {
'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8',
'Accept-Language': 'en',
}

添加一个两个pipelines方法,一个是自己写的,一个是scrapy_redis中存在自带的,

后面数字的代表优先级,数字越小优先级越高,这里表示数据会先经过自己写的管道,再通过scrapy_redis的管道存到redis数据库中

ITEM_PIPELINES = {
'sinaNews.pipelines.SinanewsPipeline': 300,
'scrapy_redis.pipelines.RedisPipeline': 400,
}


<h3>运行程序</h3>
- 因为是分布式,程序需要在不同的机器上跑,我们需要**统一控制**,所以还需要**修改sina.py**(自己写的spider),**增加redis_key**
将start_urls = ['http://news.sina.com.cn/'] **改为**:**redis_key = "sinaspider:start_urls"**
- 将写好的项目打包上传到其它有爬虫环境的机器(我用的是自己的windows电脑,装了两个ubuntu的虚拟机,将程序传到虚拟机中,由于数据量比较小,所以就只弄了两个虚拟机,经过测试,速度明显是比一台机器要快很多)
- 程序上传到不同的系统后,可以修改item["spider"]的值来区分是哪一台电脑爬的数据(虽然没什么用,但是我就想看)
- **需要注意的是**,ubuntu虽然都默认安装了python3.5和python2.7,但是默认的是python2.7解释器,在用之前改用适合自己程序的解释器就行了

<h3>运行结果</h3>
- **进入**到主机的**redis数据库**,**执行命令**:**lpush sinaspider:start_urls http://news.sina.com.cn/** (lpush key value)**第三个参数不加引号**
- 效率比一台机器高很多(这不是废话嘛)
- 数据可以用RedisDesktopManager可视化工具查看:
![](https://img2018.cnblogs.com/blog/1066684/202001/1066684-20200109164712403-1956852603.png)
![](https://img2018.cnblogs.com/blog/1066684/202001/1066684-20200109164740977-1366568305.png)
**sina:dupefilter是url指纹的数据,用来区分爬过url,防止重复爬取去**
**sina:items是爬取的数据**
- 到这里,一个简单的分布式爬虫就搭建成功了。
posted @ 2020-01-09 16:51  我要去巴黎  阅读(202)  评论(0)    收藏  举报