Ich versuche, eine Form zu http://apps.fas.usda.gov/esrquery/esrq.aspx in Python zu unterbreiten, mit dem folgenden Code:einreicht Form in Python mit mechanisieren
import urllib
from bs4 import BeautifulSoup
import mechanize
import datetime
today = datetime.date.today().strftime("%m/%d/%Y")
url = 'http://apps.fas.usda.gov/esrquery/esrq.aspx'
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)
viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value']
eventval = soup.find('input', {'id' : '__EVENTVALIDATION'})['value']
br = mechanize.Browser(factory=mechanize.RobustFactory())
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
br.open(url)
# fill form
br.select_form("aspnetForm")
br.form.set_all_readonly(False)
br.form['__EVENTTARGET'] = ''
br.form['__EVENTARGUMENT'] = ''
br.form['__LASTFOCUS'] = ''
br.form['__VIEWSTATE'] = viewstate
br.form['__VIEWSTATEGENERATOR'] = '41AA5B91'
br.form['__EVENTVALIDATION'] = eventval
br.form['ctl00$MainContent$lbCommodity'] = ['401']
br.form['ctl00$MainContent$lbCountry'] = ['0:0']
br.form['ctl00$MainContent$ddlReportFormat'] = ['10']
br.find_control('ctl00$MainContent$cbxSumGrand').items[0].selected = True
br.find_control('ctl00$MainContent$cbxSumKnown').items[0].selected = False
br.form['ctl00$MainContent$rblOutputType'] = ['2']
br.form['ctl00$MainContent$tbStartDate'] = '01/01/1999'
br.form['ctl00$MainContent$ibtnStart'] = ''
br.form['ctl00$MainContent$tbEndDate'] = today
br.form['ctl00$MainContent$ibtnEnd'] = ''
br.form['ctl00$MainContent$rblColumnSelection'] = ['regular']
response = br.submit()
Die Antwort, die ich bekommen habe ist, im Wesentlichen nur der HTML-Code der Seite mit dem Formular ausgefüllt wie erwartet. Allerdings habe ich eine Excel-Datei erwartet (da ich OutputType Wert von 2 gewählt habe)
Ich denke, ich vermisse etwas auf der Einreichung Front. Könnte jemand etwas beleuchten, was ich vermisse?
Wenn ich dies tue, schreibt die Antwort den HTML-Code (mit korrekt ausgefülltem Formular) in eine .xls-Datei (gemäß meinem Pfad). Mit dem submit scheint immer noch etwas nicht in Ordnung zu sein. Was ich bemerkt habe ist, dass die Ausgabe das Kalenderbild für den Datumseingang geöffnet hat. Könnte das das Problem verursachen? Es gibt die Steuerelemente 'ctl00 $ MainContent $ ibtnStart' und 'ctl00 $ MainContent $ ibtnEnd', die ich mit leeren Eingaben verlassen habe. Könnte das möglicherweise das Problem verursachen? – rccommods
Können Sie noch mehr Hilfe bei Jeff hinzufügen? – rccommods
Es sieht aus wie das Problem mit submit ist, aber ich bin mir nicht sicher warum. Zum Beispiel, nachdem Sie das Formular gewählt haben, wenn Sie 'für cont in br.controls: print cont.name' tun, sehen Sie den Namen des Übermittlungssteuerelements dort, aber wenn Sie versuchen,' name = ... 'zu übergeben in submit, es sagt, es sieht es nicht. Außerdem ist die Ausgabe, die in die Datei geschrieben wird, die Hauptseite, nicht die Suchergebnisse, und sie ändert sich nicht, egal was Sie festlegen oder nicht auf den Steuerelementen festlegen. Selbst wenn Sie nur die Antwort einreichen und dann versuchen, die Antwort zu lesen, sehen Sie, dass sie noch auf der Startseite ist. Vielleicht muss dies eine andere Frage stellen. – Jeff