2012-01-12 6 views
3

내가 너트는 다음 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 

하지만 난이 양식을하지 않는 응답 후 이후 댓글을 달았습니다.

도움/의견을 보내 주셔서 감사합니다.

+0

이런 종류의 기계를 사용하여 보았습니까? http://pypi.python.org/pypi/mechanize –

+0

나는 ClientForm 웹 사이트에 가서 "이 모듈이 제공하는이 기능은 이제 기계화의 일부이며, ClientForm의 독립형 릴리즈를 더 이상 만들지 않을 것"이라고 판명했습니다. 아직도, 나는 그것이 양쪽 다 할 수있다라고 생각한다. 그러나 나는 CSV를 회수하지 않는 것에 따라 무언가를 잘못하고있다 – user1145469

답변

0

원본을 보면 양식을 채울 때 csv 파일을 생성하기 위해 PHP 스크립트가 호출되고 결과는 파일을 저장하는 대화 상자임을 알 수 있습니다. 예를 들어

가에있는 동안 :

http://www.opcom.ro/rapoarte/raportPIPsiVolumTranzactionat.php?lang=en

당신이 13/1/2012을 선택 양식을 작성하고 다음 URL을 CSV 경우 호출됩니다

http://www.opcom.ro/rapoarte/export_csv_raportPIPsiVolumTranzactionat.php?zi=13&luna=1&an=2012&limba=ro

다음 작품은 나를 위해 :

>>> import urllib2 
>>> url = "http://www.opcom.ro/rapoarte/export_csv_raportPIPsiVolumTranzactionat.php?zi=13&luna=1&an=2012&limba=ro" 
>>> request = urllib2.Request(url) 
>>> response = urllib2.urlopen(request) 
>>> print response.read() 
"PIP si volum tranzactionat pentru ziua de livrare: 13/1/2012" 

"","Pret mediu [lei/MWh]","Volum [MWh]" 
"ROPEX_DAM_Base (1-24)","185.23","31226.488" 
"ROPEX_DAM_Peak (7-22)","239.68","22773.036" 
"ROPEX_DAM_Off_Peak (1-6) & (23-24)","76.32","8453.452" 

"Interval","Pret de Inchidere a Pietei [lei/MWh]","Volum Tranzactionat [MWh]" 
"1","29.99","876.148" 
"2","70.00","1057.729" 
"3","50.00","1058.868" 
"4","50.00","1044.700" 
"5","50.00","1061.574" 
"6","61.71","1015.513" 
"7","86.08","1070.586" 
"8","181.00","1187.392" 
"9","222.00","1434.829" 
"10","230.00","1515.633" 
"11","262.60","1539.495" 
"12","226.00","1538.931" 
"13","225.00","1559.273" 
"14","271.00","1515.113" 
"15","266.42","1513.220" 
"16","250.00","1534.506" 
"17","263.02","1481.099" 
"18","298.00","1351.114" 
"19","283.42","1336.266" 
"20","280.00","1398.646" 
"21","271.00","1450.183" 
"22","219.34","1346.750" 
"23","170.00","1219.772" 
"24","128.88","1119.148" 

>>> 

이 도움이 참조하십시오. 양식을 작동시킬 수 없다는 것을 알게되면 항상 패턴을 따라 URL을 작성할 수 있습니다.

+0

굉장한! 많은 감사 – user1145469