这是一个特定于网站的问题,我很好奇 - 因为我还在了解网络请求的大部分动态。
我知道如何使用Pyhton的请求库将数据有效负载添加到http请求中:
payload = {
"data": "whatever_data_string_here"
}
r = requests.get('url', data=payload)
我仍然很少知道何时以及如何应用这种方法。我正在玩不同的网站类型,试图找到理解请求数据的不同方法的独特方法,并且已经被以下网站所困扰:
aaimedicine(dot)com/fap/
忽略他们在缩写中的不良选择,我试图找出如何迭代他们形式的不同专业类型的请求。
该网站的一般功能是,您可以从Specialty
下拉表单中选择一个选项,点击Search
,然后显示相关结果。
我尽我所能,似乎通过使用请求标头提交的数据检索数据,如下所示:
specialty=Massage_Bodywork&specother=&state=ALL&Submit=Search+%C2%BB
我发现通过在控制台视图中检查请求标头,但并不完全知道如何将其应用于我的http请求。
我尝试过以下方法:
for option in options:
r = requests.get('http://www.aaimedicine(dot)com/fap/', data={"Form Data": "specialty={}&specother=&state=ALL&Submit=Search+%C2%BB".format(option)})
这并没有回复我正在寻找的数据,只是在提交选项之前没有提供原始网址的html。
我想知道如何制作这些类型的请求,以便可以迭代这些选项。
答案 0 :(得分:0)
如果您查看/fap
页面的html来源,您会看到
<form method="post" action="">
所以我猜你可能只需要使用requests.post()而不是.get()。
但正如ettanany在上面的评论中所提到的,这不是一个好主意,因为它不是一个web api(它可能随时改变,并且会破坏你的脚本)。
答案 1 :(得分:0)
我已经意识到可以通过以下标头源在此实例中发出此类POST
请求:
specialty=Speciality_Choice_Value&specother=&state=ALL&Submit=Search+%C2%BB
通过请求模块使用它:
payload = {
"specialty": "Speciality_Choice_Value",
"specother": "",
"state": "ALL",
"Submit": "Search+%C2%BB",
}
r = request.post('theurl.com', data=payload)