Python - 从网站登录和下载特定文件

时间:2017-07-14 16:35:21

标签: python login python-requests

我尝试登录网站并下载特定文件的尝试已经下降。

具体来说,我正在登录此网站http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=0

按顺序,以便我可以在下载文件之前选择特定的变量和参数,并保存为excel或csv。

特别是,我想在选择作物类型,供水类型,输入水平,时间段和地理区域之前切换突出显示的输入inputs,然后再下载文件,可视化和下载& #39;按钮。

例如,我想获取小麦(作物),雨水灌溉(供水),高水位(输入水平),1961-1990(时间段,基线),美利坚合众国(地理区域)的数据)。然后我想将它保存为excel文件。

到目前为止,这是我的代码:

# Import library
import requests

# Define url, username, and password
url = 'http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=0'
user, password = 'Username', 'Password'
resp = requests.get(url, auth=(user, password))

也许我已经在整个过程的战壕中根深蒂固地看到了一个简单,可行的解决方案,但是非常感谢任何帮助。

1 个答案:

答案 0 :(得分:13)

您链接的网站使用基于HTTP POST的登录。在您的代码中,您有:

resp = requests.get(url, auth=(user, password))

将使用基本的http身份验证http://docs.python-requests.org/en/master/user/authentication/#basic-authentication

要登录此站点,您需要做两件事:

  • 持久会话cookie
  • HTTP POST请求登录表单URL

首先,让我们创建将持有cookie的会话对象,形成服务器http://docs.python-requests.org/en/master/user/advanced/#session-objects

s = requests.Session()

接下来,您需要使用GET请求访问网站。这将为您生成cookie(服务器将为您的会话发送cookie)。

s.get(site_url)

最后一步是登录网站。您可以使用Firebug或Chrome开发者控制台(取决于您使用的浏览器)来检查需要发送的字段(转到“网络”标签)。

s.post(site_url, data={'_username': 'user', '_password': 'pass'})

这两个字段(_username,_ password)似乎对您的站点有效,但是当我检查在POST请求期间发送的数据时,还有更多字段。我不知道他们是否有必要。

之后,您将通过身份验证。接下来将访问您要下载的文件的URL。

s.get(file_url)

您提供的链接包含查询字符串,其中包含可能与您要突出显示的选项相关的各种选项。您可以使用它来下载带有所需选项的文件。

警告说明

请注意,此站点未使用HTTPS安全连接。您将提供的任何凭据都将通过互联网进行未加密,并且可能会被不应该看到的人看到。