Python网络抓取:如何配置多部分/表单数据负载



我正在尝试抓取此网站:https://kfz.virtuelles-rathaus.de/igv2-man/servlet/Internetgeschaeftsvorfaelle

但我不知道如何建立一个有效的请求主体。状态代码为200,因此请求本身可以工作。在回复中,它说它无法处理数据,因为我使用了浏览器导航。它希望我改为使用网站按钮。

我认为这是因为负载配置不正确,但我无法使其工作。

我已经尝试过以下内容:

  • 手动设置标题
  • 使用requests_toolbelt.multipart.encoder
  • 自己为多部分/数据格式创建边界

从Chrome开发工具复制的解码有效负载

WKZ_UNTERSCH_Z:WT
WKZ_ERKENN_Z:SJ
WKZ_ZIFFERN:454
WKZ_SUCHMERKMAL:NULL
BTN_WKZSUCHE:suchen
ZEITSTEMPEL:2022040815031191

从Chrome开发工具复制的编码有效负载

------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";"WKZ_ NTERSCH_;

WT
------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";WKZ_ERKENN_ Z";

SJ
------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";"WKZ_ ZIFFERN";

454
------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";WKZ_SUCHMERKMAL";

NULL
------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";"BTN_ WKZSUCHE";

suchen
------WebKitFormBoundaryj9dFOsSgrDr5dSwA
内容处置:表单数据;name=";ZEITSTEMPEL";

2022040815031191
------WebKitFormBoundaryj9dFOsSgrDr5dSwA-

我的代码:

import requests
from datetime import datetime

def main():
payload = {"WKZ_UNTERSCH_Z": "WT",
"WKZ_ERKENN_Z": "GH",
"WKZ_ZIFFERN": "454",
"WKZ_SUCHMERKMAL": "NULL",
"BTN_WKZSUCHE": "suchen",
"ZEITSTEMPEL": datetime.strftime(datetime.now(), '%Y%m%d%H%S%M%f')[:-4]}
url = 'https://kfz.virtuelles-rathaus.de/igv2-man/servlet/Internetgeschaeftsvorfaelle'
# Initialize Session and get Cookie with session ID
s = requests.Session()
r = s.get(f'{url}?MANDANT=08337000&AUFRUF=WKZ')
r = s.post(
f'{url}', data=payload, verify=False)
# Save Response for further scraping
with open('z_1.html', 'w') as f:
f.write(str(r.text))

if __name__ == '__main__':
main()

我已经提前感谢你们的帮助

编辑:

使用MultipartEncoder:时创建的Body

--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";"WKZ_ NTERSCH_;

WT
--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";WKZ_ERKENN_ Z";

SJ
--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";"WKZ_ ZIFFERN";

454
--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";WKZ_SUCHMERKMAL";

NULL
--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";"BTN_ WKZSUCHE";

suchen
--b3dccffd58a47883c42249db16600856
内容处置:表单数据;name=";ZEITSTEMPEL";

2022040909485493
--b3dccffd58a47883c42249db16600856-

我找到了问题的答案

我对数据格式没有问题,但我使用了错误的时间戳。

解决方案是使用以前响应的时间戳,而不是当前时间。

最新更新