Отправка данных формы на страницу aspx

Необходимо выполнить поиск на веб-сайте

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

это страница aspx (я начинаю этот поход по состоянию на вчерашний день, извините за вопросы noob)

используя BeautifulSoup, я могу получить __VIEWSTATE и __EVENTVALIDATION следующим образом:

  viewstate = soup.find('input', {'id' : '__VIEWSTATE'})['value'] eventval = 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} 

так что все это вместе:

  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 

Проблема в том, что это действительно не дает мне результатов … не знаю, нужно ли мне предоставлять каждое значение для каждого текстового поля в форме или что … возможно, я просто не делаю это правильно. в любом случае, просто надеясь, что кто-то сможет меня прямо посадить. Я думал, что у меня есть это, но я бы ожидал увидеть список врачей и контактную информацию.

любое понимание очень ценится, я использовал beautifulsoup раньше, но я думаю, что моя проблема – просто отправить запрос и получить нужную информацию в части данных.

Благодаря!

One Solution collect form web for “Отправка данных формы на страницу aspx”

принял совет от @pguardiario и отправился на путь механизации … намного проще

  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() 

Я далеко от финиша, но это меня намного больше.

  • Ищете рекомендацию хорошего учебника по передовой практике для проекта веб-соскабливания?
  • Скребок экрана с Python
  • Рубиновая альтернатива Scrapy?
  • извлекать текст из Интернета с помощью Angular JS-тэгов, таких как ng-view
  • конвертировать lxml в селектор scrapy xxs
  • Альтернативы Selenium / Webdriver для заполнения полей при сглаживании без использования Python?
  • Заполнение формы с использованием PyQt и QWebview
  • Как указать, где pygame создает игровое окно
  • Python - лучший язык программирования в мире.