请求模块中的数据有效负载?

时间:2016-12-15 19:30:09

标签: python http web-scraping python-requests

这是一个特定于网站的问题,我很好奇 - 因为我还在了解网络请求的大部分动态。

我知道如何使用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。

我想知道如何制作这些类型的请求,以便可以迭代这些选项。

2 个答案:

答案 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)