python - 使用请求检索表单结果

标签 python python-requests mechanize forms robobrowser

我想提交一个 multipart/form-data 来设置 TRILEGAL 上的模拟输入,然后从重定向页面下载可用的文件。

我研究了 requests、urllib、Grab、mechanize 等的文档,看起来在 mechanize 中我的代码是:

from mechanize import Browser
browser = Browser()
browser.open("http://stev.oapd.inaf.it/cgi-bin/trilegal")
browser.select_form(nr=0)
browser['gal_coord'] = ["2"]
browser['eq_alpha'] = ["277.981111"]
browser['eq_delta'] = ["-19.0833"]
response = browser.submit()
content = response.read()

但是,我无法测试它,因为它在 python 3 中不可用。

所以我尝试了请求:

import requests
url = 'http://stev.oapd.inaf.it/cgi-bin/trilegal'
values = {'gal_coord':"2",
        'eq_alpha':"277.981111",
        'eq_delta':"-19.0833",
        'field':" 0.047117",
          }
r = requests.post(url, files = values)

但我不知道如何到达结果页面 - 如果我这样做

r.content

它显示我刚刚提交的表单内容,而如果您打开实际的website ,然后单击“提交”,您会看到一个新窗口(遵循 method="post"action="./trilegal_1.6")。

如何通过请求进入该新窗口(即,转到单击提交按钮时打开的页面),然后单击结果页面上的链接以检索结果文件(“结果将可用”大约 2 分钟后访问此链接。”) ?

如果你能给我指出任何其他可以完成这项工作的工具,我将非常感激 - 我花了几个小时寻找可以帮助解决这个问题的东西。

谢谢!

克里斯

最佳答案

这是python 2.7的工作解决方案

from mechanize import Browser
from urllib import urlretrieve # for download purpose
from bs4 import BeautifulSoup

browser = Browser()
browser.open("http://stev.oapd.inaf.it/cgi-bin/trilegal")
browser.select_form(nr=0)
browser['gal_coord'] = ["2"]
browser['eq_alpha'] = ["277.981111"]
browser['eq_delta'] = ["-19.0833"]
response = browser.submit()
content = response.read()

soup = BeautifulSoup(content, 'html.parser')
base_url = 'http://stev.oapd.inaf.it'

# fetch the url from page source and it to base url
link = soup.findAll('a')[0]['href'].split('..')[1]
url = base_url + str(link)
filename = 'test.dat'

# now download the file
urlretrieve(url, filename)

您的文件将下载为 test.dat。您可以使用相应的程序打开它。

关于python - 使用请求检索表单结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449487/

相关文章:

python - Azure服务总线python客户端问题

python - 向给定 url 发送 100,000 个请求的最快方法是什么?

python-requests - 用户代理被覆盖

ruby - 使用 ruby​​ mechanize 从 foursquare 获取数据

asp.net - 抓取 ASP.net 网站 : Need to Page through a Gridview using Python Mechanize

python - 范式混合的粒度

python - 通过 google api 更新 google drive 上的文件后,如果不关闭 IDLE 窗口,则本地计算机上的文件不可编辑

python - 通过不在主脚本中的方法更新 Qt 界面中的文本

Python 请求 URLLib3 连接池大小

ruby-on-rails - (Rails) 无法让 Mechanize 正确读取 web xml 文件