YQA440 2024-04-16 17:51 采纳率: 80%
浏览 10
已结题

爬虫爬取京东数据,url怎么填充

img

上面是我获取京东数据的url,body,data是负载数据,我有一些地方不清楚:
1、这里的log_id、t和时间相关,
log_id=time.time()1000
t=int(time.time
1000)
我在代码中生成相应的参数并加到负载数据能否获取到响应?
因为我之前修改url中这两个参数并不能获取
2、请问这里的参数h5st的含义是什么,我注意到和时间相关,每个请求的h5st都不一样,但听说短时间内h5st可以不变(因为我要访问多个页面),如果不变,时间范围是多少呢
3、下面是一个网友给我修改的代码(我还没运行)

img


为什么他的负载参数可以和我的不一样,甚至可以没有log_id这个参数还多了其他参数
4、他代码data中body后面使用的json是什么意思
另外,他的url还比我多了个api,请问是什么意思
求各位dl解答

  • 写回答

4条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    针对你的问题,我可以给出以下解答:

    1. 这里的log_id和t参数是时间相关的,也就是说每个请求都应该带上对应的时间戳,可以使用time.time()获取,但是还需要乘上1000才能得到毫秒级别的时间戳,具体可以参考代码中的写法。在负载数据中加上这些参数能够正常获取响应,如果你之前修改了url中的这些参数但是没有成功获取到响应,可能是因为参数没有正确地加入到请求中。

    2. h5st参数是一个sign值,用于保证请求的安全性,在每个请求中应该都是不同的。如果你使用相同的h5st但是时间超过了一定范围,可能导致请求失败。具体时间范围因为京东没有公开说明,因此你需要自己进行尝试。

    3. 代码中负载参数的具体内容和个数可以根据具体情况进行调整,不一定要和你使用的负载参数相同。可能是因为他的请求需要的参数比较多,因此加入了一些额外的参数。

    4. 代码中使用的json是将一个Python字典dump成json字符串的结果,这也是requests库中常用的传递负载数据的方式之一。代码中多出来的api是请求的域名,也就是京东提供的API接口地址。

    以下是修改后的代码示例:

    import time
    import json
    import requests
    
    headers = {
        'Origin': 'https://search.jd.com',
        'Referer': 'https://search.jd.com/',
        'Cookie': 'm=jdu1702420481408866201700; shshshfpa=621799a7-c063-deab-9258-247e09619f57|1702120483; shshshfpb=4bOI1tGvz4fD3bfiPNMbSmw%3D%3D; shshshfpc=d680f97766844e7f64affad5080b99d2; shshsID=5f95f5c34395d6f5c08ad793d3a23dc9_4_1713119744095',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0;Win64;x64)AppleWebKit/537.36 (KHTML,Like Gecko)Chrome/123.0.0.0 Safari/537'
    }
    
    keyword = '5g手机'
    pvid = '6a232e7f38ba4979941b1746c02d4ce7'
    page = 1
    S = (page - 1) * 30 + 1
    
    log_id = int(time.time() * 1000)
    t = int(time.time() * 1000)
    h5st = '3' + str(t) + '_' + str(log_id)
    
    body = {
        "keyword": keyword,
        "pvid": pvid,
        "isList": 0,
        "page": page,
        "s": S,
        "click": "0",
        "log_id": log_id,
        "show_items": ""
    }
    
    data = {
        'functionId': 'pc_search_s_new',
        'client': 'pc',
        'clientVersion': '1.0.0',
        'o2o': '0',
        'area': '19_1601_50258_129167',
        'appid': 'search-pc-hot',
        'body': json.dumps(body, ensure_ascii=False),
        'loginType': '3',
        'geo': '',
        'eid': '',
        'fp': '',
        'nbf': '',
        'osName': '',
        'osVersion': '',
        'networkType': '',
        'uuid': '',
        'abtest': '',
        'host': '',
        'refer': '',
        't': t,
        'h5st': h5st,
        'xtest': '',
        'callback': ''
    }
    
    url = 'https://api.m.jd.com/api'
    
    response = requests.get(url, params=data, headers=headers)
    
    print(response.text)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月8日
  • 已采纳回答 4月30日
  • 创建了问题 4月16日

悬赏问题

  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响