【发布时间】:2015-09-19 15:10:01
【问题描述】:
我正在尝试使用 Python 请求模块进行网络表单填充并使用 BeautifulSoup 解析生成的网页以获取其中的链接(这实际上是带有 FITS 格式图像的图像链接),然后保存它。
这是我提交表单的网站:http://tgss.ncra.tifr.res.in/tgss_postage_test.html
我的代码如下:
import requests as r
from bs4 import BeautifulSoup as bs
import shutil
url = "http://tgss.ncra.tifr.res.in/cgi-bin/tgss_postage_test.cgi"
val = { 'raval':'12 00 00.00', 'decval':'-32 00 00.00'}
s1 = r.post(url, data=val)
soup = bs(s1.text,'lxml')
for link in soup.find_all('a'):
if 'tgss.ncra' in link['href']:
imgurl = link['href']
print imgurl
res = r.get(imgurl, stream=True)
with open('img.fits', 'wb') as out_file:
shutil.copyfileobj(res.raw, out_file)
对于试用表单值,例如 'raval':'12 00 00.00'、'decval':'-32 00 00.00' 会生成一个包含链接的网页。我无法分享到生成网页的链接,因为它是一个通用链接,并且只有在像上一个链接一样填写表格后才能查看内容。
从代码中可以看出,我使用 BeautifulSoup 来解析生成的网页并获取图像的链接。 问题是我从我的小代码中获得的链接不正确。当我把它写出来时,我得到一个只有 14 kb 的图像文件 (img.fits)。 如果我手动做同样的事情,我会得到一个正确的链接,然后保存的图像是 124 kb
我对编程很陌生,对 HTML 一无所知,所以知道出了什么问题会很有帮助吗?是网站有问题还是我的代码。
【问题讨论】:
-
脚本生成的链接确实是一个14kb的文件;这就是服务器为您提供的全部内容。真的,我认为您的代码没有任何问题。
-
查看presumed form itself,也许您只需要包含其他正在发布的参数?您缺少 szval、szunit 和 fmtval 参数。
-
如果我手动填写表格,然后将“FITS 文件”链接保存在生成的网页上,则该文件为 124 kb。我确实尝试过给出这些值,但它可能会导致回溯,因为它们已经在表单中设置了。
-
不,我设置了参数,正如预期的那样,我得到了一个更大的文件。
标签: python html beautifulsoup python-requests