慕飒潇湘 2021-06-24 13:52 采纳率: 72.7%
浏览 110
已采纳

xpath语法正确匹配所有,在pycharm的selenium的代码中只能提取前面四个产品的价格

  • 写回答

6条回答 默认 最新

  • 江天暮雪丨 2021-06-24 15:26
    关注

    干脆别用selenium了,我找到了两个接口:

    import requests
    from lxml import etree
    import json
    
    # 必须加 referer, 否则第一次请求无结果
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/74.0.3729.157 Safari/537.36',
        'referer': "https://mall.jd.com/"
    }
    
    info = requests.get(
        'https://module-jshop.jd.com/module/getModuleHtml.html?orderBy=99&direction=1&pageNo=1&categoryId=9061630'
        '&pageSize=20&pagePrototypeId=8&pageInstanceId=111774908&moduleInstanceId=258367169&prototypeId=55555&templateId'
        '=905542&appId=1056224&layoutInstanceId=258367169&origin=0&shopId=813953&venderId=815911&callback'
        '=jshop_module_render_callback', headers=headers).text
    info = info[29:-1]
    
    json_info = json.loads(info)
    
    # 抓取商品SKU
    tree = etree.HTML(json_info['moduleText'])
    skus = tree.xpath('//span[@class="jdNum"]/@jdprice')
    
    # 商品SKU前加上  J_
    new_skus = ['J_' + sku for sku in skus]
    
    # print(new_skus)
    
    # 使用多个商品SKU 请求价格接口
    skus_string = ','.join(new_skus)
    result = requests.get(f'https://f-mall.jd.com/prices/mgets?source=jshop&type=mgets&area=18_1482_48939_0&skuids={skus_string}&_=1624516262221').json()
    print(result)
    
    # result: 结果是一个json,包含所有请求商品的价格
    # [{'p': '69.00', 'op': '69.00', 'm': '169.00', 'cbf': 0, 'id': 'J_69200853812'}, {'p': '179.00',
    # 'op': '179.00', 'm': '369.00', 'cbf': 0, 'id': 'J_66266801909'}, ... 省略
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?