自学内容网 自学内容网

Python爬虫实战--Day03

京东全网爬虫项目

1. 需求

  • 1.1 抓取首页的分类信息
    • 大分类名称和URL
    • 中分类名称和URL
    • 小分类名称和URL
  • 1.2 抓取商品信息
    • 商品名称
    • 商品价格
    • 商品评论数量
    • 商品店铺
    • 商品促销
    • 商品选项
    • 商品图片的URL

2. 开发环境和技术选择

  • 开发语言: Python3
  • 爬虫技术: scrapy_redis分布式爬虫
  • 存储: MongoDB数据库

3. 京东全网爬虫的实现步骤

  • 定义数据模型, 明确抓取的数据
  • 实现分类爬虫
  • 实现商品爬虫
  • 解决IP反爬问题

4. 明确要抓取的数据(定义数据模型)

  • 4.1. 类别数据模型
  • 4.2. 商品数据模型

5. 实现分类爬虫

  • 5.1 分析, 分类信息的URL
    • url: https://dc.3.cn/category/get
  • 5.2 创建爬虫, 抓取数据
    • 创建类别爬虫
    • 指定起始URL
    • 解析数据, 交给引擎
      • 分析数据格式(三类数据格式)
        • book.jd.com/library/science.html|科学技术||0
        • 1713-3287|计算机与互联网||0
          • Https://channel.jd.com/{}.html
        • 9987-12854-12856|屏幕换新||0
          • Https://list.jd.com/list.html?cat={}
          • - 替换为逗号, 然后填充到占位的地方.
      • 代码实现

6. 保存分类信息

  • 实现保存分类的Pipeline类
  • open_spider方法中, 链接MongoDB数据库, 获取要操作的集合
  • process_item 方法中, 向MongoDB中插入类别数据
  • close_spider 方法中, 关闭MongoDB的链接
  • 在settings.py开启, 类别的Pipeline

7. 实现商品爬虫

  • 步骤
    • 分析, 确定数据所在的URL
    • 代码实现(核心)
    • 商品爬虫实现分布式
  • 分析, 确定数据所在的URL
    • 解析列表页, 提取商品sku_id, 实现翻页, 确定翻页的URL
    • 获取商品的基本信息, 通过手机抓包(APP), 确定URL
    • PC详情页面, 确定商品的促销信息的URL
    • PC详情页面, 确定评论信息的URL
    • PC详情页面, 确定商品价格信息的URL
  • 代码实现
    1. 重写start_requests方法, 根据分类信息构建列表页的请求
    2. 解析列表页, 提取商品的skuid, 构建商品基本的信息请求; 实现列表翻页
      1. 确定商品基本的信息请求
        1. URL:https://cdnware.m.jd.com/c1/skuDetail/apple/7.3.0/32962088964.json
        2. 请求方法:GET
        3. 参数/数据: 32962088964 商品的skuid
      2. 解析列表页, 提取商品的skuid
      3. 构建商品基本的信息请求
      4. 实现列表翻页
    3. 解析商品基本信息, 构建商品促销信息的请求
      1. 解析商品基本信息
        1. product_name: 商品名称
        2. product_img_url: 商品图片URL
        3. product_book_info: 图书信息, 作者,出版社
        4. product_option: 商品选项
        5. product_shop: 商品店铺
        6. product_category_id : 商品类别ID
      2. 构建商品促销信息的请求
      3. 准备促销信息的请求
        1. URL:https://cd.jd.com/promotion/v2?skuId=100000020845&area=1_72_4137_0&cat=737%2C794%2C798
        2. 方法: GET
        3. 参数/数据:
          1. skuId=100000020845 商品SKU_ID
          2. &area=1_72_4137_0 区域, 固定值
          3. cat=737%2C794%2C798: 类别
    4. 解析促销信息,构建商品评价信息的请求
      1. 解析促销信息
        1. product_ad : 商品促销
      2. 构建商品评价信息的请求
        1. 准备评价信息的请求
          1. URL:https://club.jd.com/comment/productCommentSummaries.action?referenceIds=100000020845
          2. 方法: GET
          3. 参数: referenceIds=100000020845 : 商品的SKU_ID
    5. 解析商品评价信息, 构建价格信息的请求
      1. 解析商品评价信息
        1. product_comments : 商品评论数量
        2. 评价数量, 好评数量, 差评数量, 好评率
      2. 构建价格信息的请求
      3. 准备价格请求:
        1. URL: https://p.3.cn/prices/mgets?skuIds=J_6933429
        2. 请求方法: GET
        3. 参数: skuIds=J_6933429 , j_后跟这个商品的sku_id
    6. 解析价格信息
      1. product_price: 商品价格
      2. 把商品数据交给引擎.
  • 商品爬虫实现分布式
    • 修改爬虫类
      • 修改继承关系
      • 指定redis_key
      • 把重写start_requests 改为 重写 make_request_from_data
        • 注意: 使用return返回一个请求对象. 不能使用yield
    • 在settings文件中配置scrapy_redis
      • 直接拷贝scrapy_redis配置信息, 到settings.py中.
    • 写一个程序用于把MongoDB中分类信息, 放入到爬虫redis_key指定的列表中

8. 保存商品数据

  • 8.1.实现存储商品Pipeline类

    • 在 open_spider方法, 建立MongoDB数据库连接, 获取要操作的集合
    • 在 process_item方法, 把数据插入到MongoDB中
    • 在close_spider方法, 关闭数据库连接
  • 8.2. 在settings.py中开启这个管道

    ITEM_PIPELINES = {
       'mall_spider.pipelines.CategoryPipeline': 300,
        # 8.2. 在settings.py中开启这个管道
       'mall_spider.pipelines.ProuctPipeline': 301,
    }
    

9. 实现下载器中间件

  • 9.1 实现随机User-Agent的中间件
  • 9.2. 实现代理IP中间件
  • 9.3. 在settings.py中开启上面的两个下载器中间件


原文地址:https://blog.csdn.net/weixin_62944327/article/details/142748125

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!