分布式爬虫scrapy-redis

释放双眼,带上耳机,听听看~!

官方github地址: https://github.com/darkrho/scrapy-redis

什么是分布式:略

scrapy-redis:一个三方基于热点redis分布式的爬虫框架,与scrapy一起使用,使用爬虫具有分布式的功能。

 

分布式爬虫原理:

分布式爬虫一般分两端,一个是服务器端(master),一个是爬虫程序端(slave),

master:为爬虫程序服务者,一般一台,一般用来提供url数据,当然也可以用来爬取数据,但是不推荐。我的是win7系统;

slave:为爬虫程序的执行者,一般多台,从master中拿到url,再爬取数据。我的是虚拟机里的centos系统;

过程:

在爬虫有任务的情况下(一般在redis里),redis数据库会产生三个库(dbname:dupefilter,dbname:requests,dbname:items),slave会根据数据库(dbname:dupefilter)中相应的指纹从数据库(dbname:requests)中的提取url进行数据爬取,同也会把相应的数据放入到数据库(dbname:items)中。

数据库说明:

dbname:dupefilter :存储url相应的指纹,用来防止url的重复爬取;

dbname:requests:存储提取到的url;

dbname:items:存储爬取到的数据;

 

配置前提:

一台master(win7),多台slave(centos7)

master装好redis,python相应的版本与应用库

centos7装好python相应的版本与应用库,并保证与master能连通。

 

redis配置设置:

打开:redis.windows.conf文件

注释掉:bind 127.0.0.1

protected-mode yes 改为 no

   分布式爬虫scrapy-redis

 

程序过程:

本文使用的是RedisCrawlSpider类

先保证scrapy程序能正常运行。再进行修改。

以代码做解释:

spider类:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1# -*- coding: utf-8 -*-
2import scrapy
3from scrapy.linkextractors import LinkExtractor
4from scrapy.spiders import CrawlSpider, Rule
5from scrapy_redis.spiders import RedisCrawlSpider
6
7class QiushiSpider(RedisCrawlSpider): # 继承RedisCrawlSpider
8    name = 'xxx'
9    allowed_domains = ['xxx.com']
10    # start_urls = ['https://www.xxx.com/text/']
11    redis_key = 'qiushi:start_urls'  # 设置start_url
12
13    # 提取对应的url规则
14    rules = (
15        Rule(LinkExtractor(allow=r'/article/\d+'), callback='parse_item', follow=True),
16        Rule(LinkExtractor(allow=r'/text/page/\d+/'), callback='parse_item', follow=True),
17    )
18
19    def parse_item(self, response):
20        auther = response.xpath('//span[@class="side-user-name"]').extract_first().strip()
21        content = response.xpath('//div[@class="content"]').extract_first().strip()
22
23        yield {
24            "auther": auther,
25            "content": content
26        }
27
28

 

settings设置:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1# 对应的配置
2DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
3SCHEDULER = "scrapy_redis.scheduler.Scheduler"
4SCHEDULER_PERSIST = True    # 是否允许暂停
5#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"
6#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"
7#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"
8
9ITEM_PIPELINES = {
10    'scrapy_redis.pipelines.RedisPipeline': 400,
11}
12
13LOG_LEVEL = 'DEBUG'
14
15REDIS_HOST = '192.168.8.101'    # 访问master的主机ip
16REDIS_PORT = '6379'            # reids端口
17
18
19

 其它不用改。

将程序拷贝到centos里面。并切换到spiders目录中

运行对应的爬虫命令:


1
2
1scrapy runspider xxx.py
2

    分布式爬虫scrapy-redis

数据:

分布式爬虫scrapy-redis

分布式爬虫scrapy-redis

 

可以看到数据在正常爬取。看看redis里的数据

分布式爬虫scrapy-redis

分布式爬虫scrapy-redis

分布式爬虫scrapy-redis

 

 

 

 

给TA打赏
共{{data.count}}人
人已打赏
安全经验

职场中的那些话那些事

2021-9-24 20:41:29

安全经验

elk+redis 搭建nginx日志分析平台

2021-11-28 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索