script - web scraping python beautifulsoup tutorial
Navegando por un sitio web en python, raspado y publicaciĆ³n (1)
Ya hay muchos recursos buenos en stackoverflow, pero todavía tengo problemas. He visitado estas fuentes:
- cómo enviar una consulta a la página .aspx en python
- Enviar una solicitud de publicación a una página aspx
- Eliminando la página web de aspx con Python usando BeautifulSoup
- http://www.pythonforbeginners.com/cheatsheet/python-mechanize-cheat-sheet
Estoy intentando visitar http://www.latax.state.la.us/Menu_ParishTaxRolls/TaxRolls.aspx y seleccionar una Parroquia. Creo que esto fuerza una publicación y me permite seleccionar un año, que se publica nuevamente, y permite aún más selección. He escrito mi guión de diferentes maneras siguiendo las fuentes anteriores y no he podido enviar el sitio para permitirme ingresar un año.
Mi código actual
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()
También intenté esto en el shell y lo que ingresé más lo que recibí (modificado para reducir el volumen) se puede encontrar en http://pastebin.com/KAW5VtXp
De todos modos, trato de cambiar el valor en la lista desplegable de Parish y publicar Me llevan a la página de inicio de sesión de un webmaster.
¿Me estoy acercando a esto de la manera correcta? Cualquier pensamiento sería extremadamente útil.
¡Gracias!
Terminé usando selenio.
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()