2014-03-06 20 views
5

Es gibt viele gute Ressourcen bereits auf Stackoverflow, aber ich habe immer noch ein Problem. Ich habe diese Quellen besucht:Navigieren einer Website in Python, Scraping und Buchung

Ich versuche http://www.latax.state.la.us/Menu_ParishTaxRolls/TaxRolls.aspx zu besuchen und eine Gemeinde wählen. Ich glaube, das zwingt einen Beitrag und erlaubt mir, ein Jahr auszuwählen, das erneut posten kann und noch mehr Auswahl zulässt. Ich habe mein Skript ein paar verschiedene Arten geschrieben, die den oben genannten Quellen folgen, und konnte die Seite nicht erfolgreich einreichen, um mir zu erlauben, ein Jahr einzugeben.

Mein aktueller Code

import urllib 
from bs4 import BeautifulSoup 
import mechanize 

headers = [ 
    ('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'), 
    ('Origin', 'http://www.indiapost.gov.in'), 
    ('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17'), 
    ('Content-Type', 'application/x-www-form-urlencoded'), 
    ('Referer', 'http://www.latax.state.la.us/Menu_ParishTaxRolls/TaxRolls.aspx'), 
    ('Accept-Encoding', 'gzip,deflate,sdch'), 
    ('Accept-Language', 'en-US,en;q=0.8'), 
] 

br = mechanize.Browser() 
br.addheaders = headers 

url = 'http://www.latax.state.la.us/Menu_ParishTaxRolls/TaxRolls.aspx' 

response = br.open(url) 
# first HTTP request without form data 
soup = BeautifulSoup(response) 
# parse and retrieve two vital form values 
viewstate = soup.findAll("input", {"type": "hidden", "name": "__VIEWSTATE"}) 
eventvalidation = soup.findAll("input", {"type": "hidden", "name": "__EVENTVALIDATION"}) 

formData = (
    ('__EVENTVALIDATION', eventvalidation[0]['value']), 
    ('__VIEWSTATE', viewstate[0]['value']), 
    ('__VIEWSTATEENCRYPTED',''), 

) 



try: 
    fout = open('C:\\GIS\\tmp.htm', 'w') 
except: 
    print('Could not open output file\n') 

fout.writelines(response.readlines()) 
fout.close() 

ich dies habe auch in der Shell versucht, und was ich eingegeben und was bekam ich (Änderung der Masse zu reduzieren) kann ich jedenfalls http://pastebin.com/KAW5VtXp

finden Versuchen Sie, den Wert in der Dropdown-Liste "Parish" zu ändern und zu einer Webmaster-Anmeldeseite zu gelangen.

Bin ich damit auf den richtigen Weg? Alle Gedanken wären sehr hilfreich.

Danke!

Antwort

3

Ich endete mit Selen.

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://www.latax.state.la.us/Menu_ParishTaxRolls/TaxRolls.aspx") 
elem = driver.find_element_by_name("ctl00$ContentPlaceHolderMain$ddParish") 
elem.send_keys("TERREBONNE PARISH") 
elem.send_keys(Keys.RETURN) 

elem = driver.find_element_by_name("ctl00$ContentPlaceHolderMain$ddYear") 
elem.send_keys("2013") 
elem.send_keys(Keys.RETURN) 

elem = driver.find_element_by_id("ctl00_ContentPlaceHolderMain_rbSearchField_1") 
elem.click() 

APN = 'APN # here' 
elem = driver.find_element_by_name("ctl00$ContentPlaceHolderMain$txtSearch") 
elem.send_keys(APN) 
elem.send_keys(Keys.RETURN) 

# Access the PDF 
elem = driver.find_element_by_link_text('Generate Report') 
elem.click() 
elements = driver.find_elements_by_tag_name('a') 
elements[1].click()