scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫

- 图书价格爬取分析

  1. 点击一个页面检查一下
    scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第1张图片

  2. json.cn页面进行分析检查,因为有很多价格,市场价,会员价,因此我们只需要选择一种即可
    scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第2张图片scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第3张图片

- 图书价格ajax获取:

  1. 价格 url ----ajax请求 —发送单独获取数据的 —个数不确定
    而我们要做的是一本书 对应一个价格
    scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第4张图片2. https://p.3.cn/prices/mgets?skuIds=J_12508277
            sku_id = book.xpath('.div/@data-sku')
            price_url = 'https://p.3.cn/prices/mgets?skuIds=J_{}'.format()

scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第5张图片3.解析价格

 # 解析价格
    def parse_price(self, response):
        item = response.meta.get('book')
        
        # 1.获取 返回的 响应对象数据 ==body==bytes 二进制
        data = response.body
        # 2.将二进制的数据----string
        data_str = data.decode()
        # 3.将json格式的字符串 ---列表--字典
        data_list = json.loads(data_str)
        item['price'] = data_list[0]['p']

优化后的代码为:

    # 解析价格
    def parse_price(self, response):
        item = response.meta['book']
        item['price'] = json.loads(response.body.decode())[0]['p']

        yield item

特别注意的是

scrapy爬取数据为什么价格为空,为什么在xpath解析有显示价格,该怎么解决,京东存在ajax反爬虫_第6张图片

你可能感兴趣的:(python)