Istnieje potrzeba, aby zrobić wyszukiwania na stronieWysyłanie danych z formularza do strony aspx
url = r'http://www.cpso.on.ca/docsearch/'
To jest strona aspx (Zaczynam tę wędrówkę od wczoraj, przepraszam za pytanie Noob)
użyciu BeautifulSoup mogę uzyskać __VIEWSTATE i __EVENTVALIDATION takiego:
viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value']
eventval = soup.find('input', {'id' : '__EVENTVALIDATION'})['value']
a nagłówek może być ustawione tak:
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'}
jeśli przejdziesz do strony internetowej, jedynymi wartościami naprawdę chcę przekazać to imię i nazwisko ...
LN = "smith"
FN = "a"
data = {"__VIEWSTATE":viewstate,"__EVENTVALIDATION":ev,
"ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtLastName":LN,
"ctl00$ContentPlaceHolder1$MainContentControl1$ctl00$txtFirstName":FN}
więc wprowadzenie go wszystkie razem jej tak:
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
Problem polega na tym, że naprawdę nie daje mi to rezultatów ... nie wiem, czy muszę podać każdą wartość dla każdego pola tekstowego w formularzu, czy co ... może po prostu nie robię tego poprawnie . tak czy inaczej, tylko mając nadzieję, że ktoś może mnie wyprostować. Myślałem, że to mam, ale spodziewałbym się zobaczyć listę lekarzy i dane kontaktowe.
jakikolwiek wgląd jest bardzo cenny, użyłem wcześniej beautifulsoup, ale myślę, że moim problemem jest właśnie wysłanie Żądania i posiadanie odpowiedniej ilości informacji w części danych.
Dzięki!
Co masz w zamian? – Nasir
hi @nasir, wyjście jest po prostu beautifulsoup parsowanie początkowej zmiennej URL jak poprzednio ... więc nie jest to naprawdę daje mi nic użytecznego poza tym, że nie powoduje błędów podczas robienia adresu urllib2.request (URL, dane, nagłówki). Dzięki, –
Zrobiłem kilka powiązań bez powodzenia. Dziwne dla mnie. Próbowałem symulować całe żądanie, dodając wszystkie nagłówki żądań i dane wejściowe formularza. nadal nie ma blokady, a odpowiedź ma "Connection: close", ale powinna mieć kod 302. Postaram się sprawdzić, czy potrafię to rozwiązać. – Nasir