Enviando datos de formulario a la página aspx

Hay una necesidad de hacer una búsqueda en el sitio web.

url = r'http://www.cpso.on.ca/docsearch/' 

esta es una página aspx (estoy empezando esta caminata a partir de ayer, perdón por las preguntas de noob)

usando BeautifulSoup, puedo obtener __VIEWSTATE y __EVENTVALIDATION de esta manera:

  viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value'] eventval = soup.find('input', {'id' : '__EVENTVALIDATION'})['value'] 

y el encabezado se puede establecer de esta manera:

  headers = {'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml; q=0.9,*/*; q=0.8', 'Content-Type': 'application/x-www-form-urlencoded'} 

Si vas a la página web, los únicos valores que realmente quiero pasar son el nombre y el apellido …

  LN = "smith" FN = "a" data = {"__VIEWSTATE":viewstate,"__EVENTVALIDATION":ev, "ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtLastName":LN, "ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtFirstName":FN} 

así que juntándolo todo es así:

  import urllib import urllib2 import urlparse import BeautifulSoup url = r'http://www.cpso.on.ca/docsearch/' html = urllib2.urlopen(url).read() soup = BeautifulSoup.BeautifulSoup(html) viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value'] ev = soup.find('input', {'id' : '__EVENTVALIDATION'})['value'] headers = {'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml; q=0.9,*/*; q=0.8', 'Content-Type': 'application/x-www-form-urlencoded'} LN = "smith" FN = "a" data = {"__VIEWSTATE":viewstate,"__EVENTVALIDATION":ev, "ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtLastName":LN, "ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtFirstName":FN} data = urllib.urlencode(data) request = urllib2.Request(url,data,headers) response = urllib2.urlopen(request) newsoup = BeautifulSoup.BeautifulSoup(response) for i in newsoup: print i 

El problema es que realmente no parece darme los resultados … no sé si necesito proporcionar todos los valores para cada cuadro de texto en el formulario o qué … quizás no lo estoy haciendo correctamente. De todos modos, solo con la esperanza de que alguien me ayude. Pensé que lo tenía, pero esperaría ver una lista de médicos e información de contacto.

cualquier idea es muy apreciada, he usado beautifulsoup anteriormente, pero creo que mi problema es simplemente enviar una Solicitud y tener la cantidad correcta de información en la parte de datos.

¡Gracias!

Tomó el consejo de @pguardiario y siguió la ruta de mecanizado … mucho más simple.

  import mechanize url = r'http://www.cpso.on.ca/docsearch/' request = mechanize.Request(url) response = mechanize.urlopen(request) forms = mechanize.ParseResponse(response, backwards_compat=False) response.close() form = forms[0] form['ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtLastName']='Smith' form['ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtPostalCode']='K1H' print mechanize.urlopen(form.click()).read() 

Estoy muy lejos de terminar, pero esto me está llevando mucho más lejos.