【发布时间】:2025-12-02 07:40:01
【问题描述】:
我正试图从以下网址下载 csv 文件:
网站上有 4 个表单,我设法在正确的表单上设置了日期,然后我发布了该表单,我得到了带有正确 html 的 http 响应。但我想实际下载 csv 而不是响应的 html。我以为我必须提交 2 个表单,首先是日期,然后是 csv 选择,但在第一个响应中,我没有得到任何可以与之对话的表单。
这是我的代码:
#!/usr/bin/env python
import csv
from urllib2 import urlopen
from ClientForm import ParseResponse
import urllib2
proxy = urllib2.ProxyHandler({'http': '172.26.10.100:8080'})
# proxy = urllib2.ProxyHandler({})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/2010010' \
'1 Firefox/4.0.1',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'en-us,en;q=0.5',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.7'}
# set the request
url = "http://www.opcom.ro/rapoarte/raportPIPsiVolumTranzactionat.php?lang=en"
request = urllib2.Request(url, None, headers)
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, response:
pass
print response.geturl()
print response.info() # headers
# print response.read() # body
# get forms from response
forms = ParseResponse(response, backwards_compat=False)
response.close()
# print "###FORMS: " ,len(forms)
# for i in range(len(forms)):
# print "@@@@@"
# print forms[i]
form1 = forms[1]
# setting a specific date in the form
form1.set_value("7", kind="text", nr=0)
form1.set_value("10", kind="text", nr=2)
form1.set_value("2011", kind="text", nr=4)
print form1
# # # SEND THE FORM
request2 = forms[1].click() # urllib2.Request object BIEN
try:
response2 = urllib2.urlopen(request2)
except urllib2.HTTPError, response2:
pass
print response2.geturl()
print response2.info() # headers
# print response2.read() # body
with open('salida.txt', 'w') as f:
f.write(response2.read())
forms2 = ParseResponse(response2, backwards_compat=False)
response2.close()
print "###FORMS 2: " ,len(forms2)
请注意,第一个表单(日期选择器)是 forms 数组中的 forms[1]。 forms[2] 是 CSV 文件或 XML 的选择框。选择 CSV 的代码是:
# form2 = forms2[2]
# # Select CSV file in selection control
# form2.find_control("menu_sari").items[1].selected = True # check
但我评论了它,因为在回复后我没有收到此表格。
非常欢迎任何帮助/反馈。
【问题讨论】:
-
你有没有考虑过使用机械化来做这种事情? pypi.python.org/pypi/mechanize
-
我访问了 ClientForm 网站,发现:“这个模块提供的这个功能现在是 mechanize 的一部分。我不打算进一步发布 ClientForm 的独立版本”。不过,我认为两者都可以完成,但我做错了,因为它没有检索 CSV
标签: python forms csv download urllib2