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

6 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.

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

例如,我想获得的数据小麦(作物),雨浇(供水),高(输入电平),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))
Run Code Online (Sandbox Code Playgroud)

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

小智 14

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

resp = requests.get(url, auth=(user, password))
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

s = requests.Session()
Run Code Online (Sandbox Code Playgroud)

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

s.get(site_url)
Run Code Online (Sandbox Code Playgroud)

最后一步将是登录网站.您可以使用Firebug或Chrome Developer Console(取决于您使用的浏览器)来检查需要发送的字段(转到"网络"选项卡).

s.post(site_url, data={'_username': 'user', '_password': 'pass'})
Run Code Online (Sandbox Code Playgroud)

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

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

s.get(file_url)
Run Code Online (Sandbox Code Playgroud)

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

警告说明

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