V'è la necessità di fare una ricerca sul sito webL'invio di dati del modulo alla pagina aspx
url = r'http://www.cpso.on.ca/docsearch/'
questa è una pagina aspx (sto cominciando questo trekking come di ieri, mi dispiace per le domande del noob)
utilizzando BeautifulSoup, posso ottenere il __VIEWSTATE e __EVENTVALIDATION come questo:
viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value']
eventval = soup.find('input', {'id' : '__EVENTVALIDATION'})['value']
e l'intestazione può essere impostato in questo modo:
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'}
se si va alla pagina web, gli unici valori voglio davvero passare sono il nome e il cognome ...
LN = "smith"
FN = "a"
data = {"__VIEWSTATE":viewstate,"__EVENTVALIDATION":ev,
"ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtLastName":LN,
"ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtFirstName":FN}
in modo da mettere insieme tutto il suo in questo modo:
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
Il problema è che non sembra davvero darmi i risultati ... non so se ho bisogno di fornire ogni valore per ogni casella di testo nel modulo o cosa ... forse non lo sto facendo correttamente . comunque, speravo solo che qualcuno potesse mettermi dritto. Pensavo di averlo, ma mi aspetterei di vedere un elenco di medici e informazioni di contatto.
qualsiasi intuizione è molto apprezzata, ho usato beautifulsoup prima, ma penso che il mio problema è solo l'invio di richiesta e la giusta quantità di informazioni nella parte dati.
Grazie!
Cosa ti restituisce? – Nasir
hi @nasir, l'output è solo il beautifulsoup che analizza la variabile URL iniziale come prima ... quindi non mi dà veramente nulla di utile se non quello di non fare errori quando si esegue il pezzo urllib2.request (url, data, header) .. Grazie, –
Ho stretto qualche legame senza successo. Strano per me. Ho provato a simulare l'intera richiesta aggiungendo tutte le intestazioni delle richieste e gli input dei moduli. ancora nessun blocco e la risposta ha 'Connessione: chiusa 'ma dovrebbe avere un codice 302. Proverò a vedere se riesco a risolverlo. – Nasir