내가 너트는 다음 URL에서 CSV 파일을 다운로드하려고 운전 해요 :파이썬 다운로드 파일 : urllib2가 된 위해서는 ClientForm
웹 사이트에 4 개 형태가있다, 나는 오른쪽 양식에 날짜를 설정 관리 , 그런 다음 양식을 게시하고 올바른 html로 http 응답을받습니다. 하지만 실제로 응답의 HTML이 아닌 CSV를 다운로드하고 싶습니다. 나는 2 가지 형식, 첫 번째 날짜, 그리고 csv 선택 후에 제출해야한다고 생각했지만, 첫 번째 응답에서 나는 대화 형식을 얻지 못했다. 첫 번째 형태 (날짜 선택)은 [1] 형태의 배열 형태임을
#!/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)
공지 :
여기 내 코드이다. 그리고 양식 [2]는 CSV 파일 또는 XML의 선택 상자입니다. CSV를 선택하는 코드는 다음과 같습니다
# form2 = forms2[2]
# # Select CSV file in selection control
# form2.find_control("menu_sari").items[1].selected = True # check
하지만 난이 양식을하지 않는 응답 후 이후 댓글을 달았습니다.
도움/의견을 보내 주셔서 감사합니다.
이런 종류의 기계를 사용하여 보았습니까? http://pypi.python.org/pypi/mechanize –
나는 ClientForm 웹 사이트에 가서 "이 모듈이 제공하는이 기능은 이제 기계화의 일부이며, ClientForm의 독립형 릴리즈를 더 이상 만들지 않을 것"이라고 판명했습니다. 아직도, 나는 그것이 양쪽 다 할 수있다라고 생각한다. 그러나 나는 CSV를 회수하지 않는 것에 따라 무언가를 잘못하고있다 – user1145469