IT七剑客 IT七剑客
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
  • 基础python文章

    • 一篇万字博文带你入坑爬虫这条不归路
    • 使用scrapyd部署爬虫项目
    • scrapy_redis分布式爬虫的创建流程及启动
      • (1)编写普通爬虫:
      • (2)改造成分布式爬虫:
        • 第一:爬虫文件5步走!
        • 第二:settings.py配置文件改造!
        • 普通的scrapy框架下的爬虫已经改造成为分布式爬虫,然后将此项目再复制一个一模一样的;分别使用命令(scrapy crawl 项目名)运行,会发现两个项目终端都在等待;此时,我们打开Redis,向其中(lpush jd 起始url)即可正常运行两个爬虫项目;最后,我们会发现两个项目爬取的数据总和即为此次爬虫的需求数据!
      • 👑有关于Me
    • Scrapy实战之豆瓣top250电影信息的爬取
    • Scrapy框架初识
    • Python常用模块 之threading和Thread模块 第三阶段 线程池
    • Python常用模块 之 threading和Thread模块 第二阶段 线程通信及队列基操
    • Python常用模块 之 threading和Thread模块 第一阶段 线程的实现
    • Python简介&&开发环境配置&&工具准备
  • 前后端实战

  • Python面试

  • 孤寒者 Python
  • 基础python文章
孤寒者
2022-08-15
目录

scrapy_redis分布式爬虫的创建流程及启动

# scrapy_redis分布式爬虫的创建流程及启动

分布式爬虫编写流程:
    1.编写普通爬虫
        1.创建项目
        2.明确目标
        3.创建爬虫
        4.保存内容
    2.改造成分布式爬虫
        1.改造爬虫
            1.导入scrapy-redis中的分布式爬虫类
            2.继承类
            3.注销start_url & allowed_domains
            4.设置redis_key获取start_urls
            5.设置__init__获取允许的域名
        2.改造配置文件(settings)
            copy配置参数
复制代码
#设置scrapy-redis
#1.启用调度将请求存储进redis
#from scrapy_redis.scheduler import Scheduler
SCHEDULER="scrapy_redis.scheduler.Scheduler"

#2.确保所有spider通过redis共享相同的重复过滤
# from scrapy_redis.dupefilter import RFPDupeFilter
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"

#3.设置当爬虫结束的时候是否保持redis数据库中的去重集合与任务队列(可以不设置)
SCHEDULER_PERSIST=True

#3.指定连接到Redis时要使用的主机和端口     目的是连接上redis数据库
REDIS_HOST="localhost"
REDIS_PORT=6379

#4.是否将数据存入Redis数据库的管道:
ITEM_PIPELINES = {
   'jd.pipelines.JdPipeline': 300,
    # 'jd.pipelines.JDSqlPipeline': 300,
    #当开启此管道,该管道将会把数据存到Redis数据库中
    'scrapy.redis.pipelines.RedisPipeline':400,
}
复制代码
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
29
30
31
32
33
34
35
36
37
38
39
40

# (1)编写普通爬虫:

以京东图书书籍信息爬取为例!毕竟,点击链接跳转详细讲解的博文: 爬取京东图书书籍信息! (opens new window)

# (2)改造成分布式爬虫:

使用场景:
    1.数据量特别巨大
    2.数据要求时间比较紧张
    
分布式的实现
    scrapy—redis实现分布式
复制代码
1
2
3
4
5
6
7

改造只需5步,以及settings.py文件的改造!

# 第一:爬虫文件5步走!

# -*- coding: utf-8 -*-
import json
from selenium import webdriver
import scrapy

from ..items import JdItem

# 1.导入分布式爬虫类
from scrapy_redis.spiders import RedisSpider

# 2.继承分布式爬虫类
# class BookSpider(scrapy.Spider):
class BookSpider(RedisSpider):
    name = 'book_test'
    # 3.注销start_url和allowed_domains
    # allowed_domains = ['book.jd.com']
    # start_urls = ['https://book.jd.com/booksort.html']
    # 4.设置redis-key
    redis_key='jd'

    # 5.设置__init__
    def __init__(self, *args, **kwargs):
        domain = kwargs.pop('domain', '')
        self.allowed_domains = list(filter(None, domain.split(',')))
        super().__init__(*args, **kwargs)

        # 实例化一个浏览器对象(实例化一次)   开启无头模式
        options = webdriver.ChromeOptions()
        options.add_argument("--headless")
        options.add_argument("--disable-gpu")
        self.driver = webdriver.Chrome(options=options, executable_path="C:\my\Chrome_guge\chromedriver.exe")
复制代码
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
29
30
31
32

# 第二:settings.py配置文件改造!

#设置scrapy-redis
#1.启用调度将请求存储进redis
#from scrapy_redis.scheduler import Scheduler
SCHEDULER="scrapy_redis.scheduler.Scheduler"

#2.确保所有spider通过redis共享相同的重复过滤
# from scrapy_redis.dupefilter import RFPDupeFilter
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"

#3.设置当爬虫结束的时候是否保持redis数据库中的去重集合与任务队列(可以不设置)
SCHEDULER_PERSIST=True

#3.指定连接到Redis时要使用的主机和端口     目的是连接上redis数据库
REDIS_HOST="localhost"
REDIS_PORT=6379

#4.是否将数据存入Redis数据库的管道:
ITEM_PIPELINES = {
   'jd.pipelines.JdPipeline': 300,
    # 'jd.pipelines.JDSqlPipeline': 300,
    #当开启此管道,该管道将会把数据存到Redis数据库中
    'scrapy.redis.pipelines.RedisPipeline':400,
}
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 普通的scrapy框架下的爬虫已经改造成为分布式爬虫,然后将此项目再复制一个一模一样的;分别使用命令(scrapy crawl 项目名)运行,会发现两个项目终端都在等待;此时,我们打开Redis,向其中(lpush jd 起始url)即可正常运行两个爬虫项目;最后,我们会发现两个项目爬取的数据总和即为此次爬虫的需求数据!

# 🔆In The End!

# 👑有关于Me

个人简介:我是一个硬件出身的计算机爱好者,喜欢program,源于热爱,乐于分享技术与所见所闻所感所得。文章涉及Python,C,单片机,HTML/CSS/JavaScript及算法,数据结构等。

从现在做起,坚持下去,一天进步一小点,不久的将来,你会感谢曾经努力的你!

认真仔细看完本文的小伙伴们,可以点赞收藏并评论出你们的读后感。并可关注本博主,在今后的日子里阅读更多技术文哦~

作者:孤寒者 链接:https://juejin.cn/post/7111519890904711199 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

编辑 (opens new window)
#Python#孤寒者
上次更新: 2023/01/22, 14:02:45
使用scrapyd部署爬虫项目
Scrapy实战之豆瓣top250电影信息的爬取

← 使用scrapyd部署爬虫项目 Scrapy实战之豆瓣top250电影信息的爬取→

最近更新
01
Coding 102 Writing code other people can read
02-26
02
Kotlin Flow响应式编程,StateFlow和SharedFlow
02-05
03
Kotlin Flow响应式编程,操作符函数进阶
02-05
更多文章>
Theme by Vdoing | Copyright © 2022-2023 IT七剑客 | MIT License
  • 闽ICP备2021006579号-4
  • 闽公网安备 35012102500470号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式