Dellevin 发表于 2024-4-7 10:17

python爬取标签接口遇到的问题

请问针对这种接口带有加密字段的该怎么获取数据,我通过cookies发送还是不行,是我的操作问题吗?
import requests

def get_company_label_with_cookies_and_payload(url, cookies, payload):
    # 构造请求头,包含cookies信息
    headers = {
      'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
    }
    # 发送 POST 请求并包含cookies信息和payload数据
    response = requests.post(url, headers=headers, cookies=cookies, json=payload)

    # 检查响应状态码
    if response.status_code == 200:
      return response.json()
    else:
      print("请求失败:", response.status_code)
      return None


if __name__ == "__main__":
    api_url = 'https://b-plugin.qixin.com/api/supplierApi/commonApi/entInfo/getEntLabel'

    cookies = {
      'flogger_fpid': 'd723afa6646f3f0b66bd9477f20daf9a',
      'ssxmod_itna': 'YqUxBDgG5Dqx9Dl4iqYI7p0Fei=GOfQIQY042DBLfd4iNDnD8x7YDv+moO+K7KS0AWfGs0DSr3qNIjbqxpOb278XYDU4i8DCMuDQsxem=D5xGoDPxDeDADYE6DAqiOD7qDdfhTXtkDbxi3fxiaDGeDeEKODY5DhxDC0mPDwx0CfZ05QA9hO6BCTKy55FrPfxG1a40H1ASINU8LQmyhwF3GEiKDXEdDvayCS6cmDBbkMO5GZnnDTexNq7iesmRDOlq4K7Gi5chx1G05Qhx4HuDY1lcPljtDiaxqHAUDD=',
      'ssxmod_itna2': 'YqUxBDgG5Dqx9Dl4iqYI7p0Fei=GOfQIQY04x8q18SqGXo=GaKSQmL7K1LKms/gSqtCaCch7Kzosjjb25=Moqidazt0BmfYMg8GNLeA2G5iLQ0=2CcCBmzuSTpqbkcHpIOkXanyvyhqxs6paZE5bKbuDspAYXZHkwgcw3fnWAxgO1cniWccGh=naqz9h0WPi3aBmSacmq47PwtA1a0EdWgOPZ=YaeQr8D2RqXicDynr8gpM=NfW8BaLQqavr91SOBxHf43W7ufo46=UbYBIPnlrYd1jyUMUbWaAf=PBXXvryQsC+fSMDKyvzHDsPmt9O35Ddm4up/05VUpxpy7jRxdnClpwWqQG0kA2eSGr4eXtAkI+liRE+5mS2mSDbR4q3TYfR9e+vSPNfAnBhvKpWjTNLY6CxNkE=E98zRR8b8bwRCAQFIlKyRlaokfqxRa1BFnf7ISM/GDxaU/iCCIZSDKu7U3FkSgXmaZzLv9T3P8HvyOzIZ/Gw/yO6PiuaxoExRa+3llb3V4wCppyjpoLbrkQaWa+2CsS0kL+t2HllaCIuqixDKwH3YFdqeduDBO4jI5ugcBY9RDxQDDLxD27GDD==',
      'sid': 's%3A5Z2W1SCjv4KC14_o5Czj2DfNgcB99dbz.%2BBzQG9oEwrp%2B9R8vqznibZ7YgZE1dvhSHqIu4RqBFxI',
      'aliyungf_tc': '53c02b50bd62534e99bbf7436ab0a2141ba1f02034c2a29135078e4be3eeee3f',
      'acw_tc': 'ac11000117124532719681480e3ae5415231d55c62649491685d4b8b4233ae'
    }

    # 请求的payload数据
    payload = {
      'eid': 'feb3c224-9f4e-4a63-9b2b-d6caffc37d00'
    }

    # 发送请求并获取响应数据
    result = get_company_label_with_cookies_and_payload(api_url, cookies, payload)
    if result:
      print(result)




之前我一直用的Selenium 我现在觉得效率太低了,还需要打开页面,等待接口加载完毕后才可以爬取,所以想改一下从接口直接cookies发送数据获取,然后cookies过期了刷新cookies再次重新获取

爱飞的猫 发表于 2024-4-7 10:17

让浏览器和 Python 都走你的抓包程序(Charles / Fiddler 等),然后对比下二者的请求有什么不同。

你截图里的请求头对比你的代码缺了很多(Accept-Encoding 可以暂时无视)。如果你要直接从脚本请求,你要分析他网站是怎么计算的这些头,并补上。

当你用 Selenium 浏览器时,其实是直接进行网页交互,因此只需要分析如何触发的对应事件(模拟键盘输入、点击等),而不需要分析具体请求构造。

jidesheng6 发表于 2024-4-7 10:23

不需要通过cookie发送,甚至你的cookie只需要一起构造到headers里面就够了,requests的cookie参数我就没用过,都是直接header传值

Dellevin 发表于 2024-4-7 10:28

jidesheng6 发表于 2024-4-7 10:23
不需要通过cookie发送,甚至你的cookie只需要一起构造到headers里面就够了,requests的cookie参数我就没用 ...

这样我试过,也不行,我总是感觉有加密字段的原因

jidesheng6 发表于 2024-4-7 10:29

Dellevin 发表于 2024-4-7 10:28
这样我试过,也不行,我总是感觉有加密字段的原因

那个字段可能是动态生成的key,传输的时候动态带过去的

xiaoye123 发表于 2024-4-7 10:34

试试打个xhr或者跟一下值 看看他是怎么生成的 可能会有动态值在里面 逆向看看

Dellevin 发表于 2024-4-7 10:47

jidesheng6 发表于 2024-4-7 10:29
那个字段可能是动态生成的key,传输的时候动态带过去的

我看别人说需要js逆向,我还没接触过,我看sources里面一个资源都没有

Pwaerm 发表于 2024-4-7 10:55

我一直困惑,为什么爬数据大家选用python,用python也需要去解读网页中的js

那为什么不直接用js来获取数据呢,直接用js可以直接改写原网页中的代码,可以省去很多逆向的复杂问题。

Dellevin 发表于 2024-4-7 10:58

Pwaerm 发表于 2024-4-7 10:55
我一直困惑,为什么爬数据大家选用python,用python也需要去解读网页中的js

那为什么不直接用js来获取数 ...

python对新手比较简单吧,而且库比较多。。。

Pwaerm 发表于 2024-4-7 11:07

Dellevin 发表于 2024-4-7 10:58
python对新手比较简单吧,而且库比较多。。。

我的意思,爬取网络数据,多数都要基于js逆向。
能读懂并且逆向js,也不算新手呀。

纯粹的新手,仅会python也爬不了数据吧。
页: [1] 2 3
查看完整版本: python爬取标签接口遇到的问题