Получить результат с веб-сайта, используя сообщение через веб-слом - PullRequest
0 голосов
/ 26 октября 2018

Вот ссылка на сайт, с которого я хочу получить свои данные Поиск дубликатов товарных знаков

Для этого мне нужно заполнить форму, но я хочу заполнить ее, используя библиотеку Python requests. Я написал код для этого, посмотрите:

from bs4 import BeautifulSoup
import requests,json

def returnJson(wordmark,page_class):
    url="http://ipindiaonline.gov.in/tmrpublicsearch/frmmain.aspx"
    search_type='WM'
    postdata={'ctl00$ContentPlaceHolder1$DDLFilter':'0','ctl00$ContentPlaceHolder1$DDLSearchType':search_type,'ctl00$ContentPlaceHolder1$TBWordmark':wordmark,'ctl00$ContentPlaceHolder1$TBClass':page_class}
    r=requests.post(url,data=postdata)
    return r

def scrapping(r):
    soup=BeautifulSoup(r.text,'html.parser')
    print(soup.prettify())
    '''soup.find_all('p')'''

scrapping(returnJson('AIWA','2'))    

Но когда я запускаю этот код, он возвращает тот же HTML-код страницы в ответ, но мне нужны результаты поиска, чтобы я мог распечатать его на своем терминале.

Примечание: - Я проверил отправляемый им почтовый запрос, и на основании этого файла я отправил этот постданный Dictionay.

here is screenshot of file

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 октября 2018

Для работы сообщения требуется еще несколько значений. Их можно получить, сначала запросив страницу без поиска (возможно, потребуется только один раз, если вы выполняете многократный поиск). Например:

from bs4 import BeautifulSoup
import requests,json

def returnJson(wordmark, page_class):
    url = "http://ipindiaonline.gov.in/tmrpublicsearch/frmmain.aspx"

    r_init = requests.get(url)
    soup = BeautifulSoup(r_init.text, 'html.parser')
    event_validation = soup.find("input", attrs={"name" : "__EVENTVALIDATION"})['value']
    view_state = soup.find("input", attrs={"name" : "__VIEWSTATE"})['value']

    search_type = 'WM'

    postdata = {
        'ctl00$ContentPlaceHolder1$DDLFilter' : '0',
        'ctl00$ContentPlaceHolder1$DDLSearchType' : search_type,
        'ctl00$ContentPlaceHolder1$TBWordmark' : wordmark,
        'ctl00$ContentPlaceHolder1$TBClass' : page_class,
        '__EVENTVALIDATION' : event_validation,
        "__EVENTTARGET" : "ctl00$ContentPlaceHolder1$BtnSearch",
        "__VIEWSTATE" : view_state,
    }

    r = requests.post(url, data=postdata)
    return r

def scrapping(r):
    soup = BeautifulSoup(r.text, 'html.parser')

    print(soup.prettify())
    '''soup.find_all('p')'''

scrapping(returnJson('AIWA','2'))
...