Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python爬虫

    • 爬虫的基础知识

    • 请求的发送方法

    • 数据提取方法

    • 高性能爬虫

    • selenium

    • 反爬以及解决方案

    • MONGODB数据库

    • scrapy框架

    • scrapy_redis

      • scrapy_redis分布式原理
      • scrapy_redis实现增量式爬虫
      • scrapy_redis实现分布式爬虫
        • scrapy_redis实现分布式爬虫
          • 学习目标
          • 1 RedisSpider
          • 1.1 分析demo中代码
          • 1.2 动手实现当当图书爬虫
          • 思路分析:
          • 2\. RedisCrawlSpider
          • 2.1 分析demo中的代码
          • 2.2 动手完成亚马逊图书爬虫
          • 思路分析:
          • 小结
      • 小结
    • 爬虫的部署

    • 爬虫框架开发分析

    • 框架雏形实现

    • 框架功能完善

    • 框架功能升级

    • 项目实战

    • pywin32介绍

  • 前端教程

  • 教程
  • Python爬虫
  • scrapy_redis
wangmings
2022-07-19
目录

scrapy_redis实现分布式爬虫

# scrapy_redis实现分布式爬虫

# 学习目标
  1. 能够应用 scrapy_redis实现分布式爬虫
  2. 能够应用 scrapy_redis中RedisCrawlspider类实现分布式爬虫

# 1 RedisSpider

# 1.1 分析demo中代码

通过观察代码:

  • 继承自父类为RedisSpider
  • 增加了一个redis_key的键,没有start_urls,因为分布式中,如果每台电脑都请求一次start_url就会重复
  • 多了__init__方法,该方法不是必须的,可以手动指定allow_domains

# 1.2 动手实现当当图书爬虫

需求:抓取当当图书的信息

目标:抓取当当图书又有图书的名字、封面图片地址、图书url地址、作者、出版社、出版时间、价格、图书所属大分类、图书所属小的分类、分类的url地址

url:http://book.dangdang.com (opens new window)

# 思路分析:
  1. 程序的入口

    当当图书中,从大分类入手,还有一个中间分类,以及小分类,小分类对一个的地址就是列表页的地址

    注意,url地址的响应和elements略微不同,其中不是每个大分类都在a标签中,中间部分分类不在span标签中

  2. 确定列表页的url地址和程序终止条件

    存在下一页

    不存在下一页

  3. 确定数据的位置

    数据都在url地址对应的响应中,包括列表

  4. 完善spider

    可以使用scrapy的方式创建爬虫,只需要把父类进行修改,添加redis_key

    同时在settings.py中进行配置

# 2. RedisCrawlSpider

# 2.1 分析demo中的代码

和scrapy中的crawlspider的区别在于,继承自的父类不相同,redis_key需要添加

# 2.2 动手完成亚马逊图书爬虫

需求:抓取亚马逊图书的信息

目标:抓取亚马逊图书又有图书的名字、封面图片地址、图书url地址、作者、出版社、出版时间、价格、图书所属大分类、图书所属小的分类、分类的url地址

url:https://www.amazon.cn/%E5%9B%BE%E4%B9%A6/b/ref=sd_allcat_books_l1?ie=UTF8&node=658390051 (opens new window)

# 思路分析:
  1. 确定rule中的规则

    可以通过连接提取器中的restrict_xpath来实现url地址的,不需要定位到具体的url地址字符串,定位到准确的标签位置即可

    注意:定位到的标签中不能包含不相关的url,否则请求不相关的地址后,数据提取会报错

    通过分析大分类和小分类的url地址,发现他们的规则仙童,即一个Rule可以实现从大分类到小分类的到列表页的过程

    1. 大分类url地址

    1. 小分类url地址

    1. 列表页翻页的url地址位置

    1. 进入详情页翻页的url地址位置

    详情页在h2标签的上一级,定位到h2后,通过..即可实现获取该url

  2. 详情页数据的抓取

    在详情页中,数据有两种,一种是电子书的信息,一种是纸质书的信息,两种页面,数据位置不同

    1. 确定书的分类,是电纸书还是纸质书

    电子书

    纸质书

    1. 不同类型的书籍分别写xpath,比如价格的提取
  3. 在settings中进行配置


# 小结

  1. scrapy_redis中RedisSPider实现分布式爬虫的方法
  2. demo中RedisCrawlspider类实现分布式爬虫的方法
  3. 完成当当图书案例
  4. 完成苏宁易购图书案例
编辑 (opens new window)
scrapy_redis实现增量式爬虫
小结

← scrapy_redis实现增量式爬虫 小结→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式