Как использовать метод Requests POST для получения результата поиска с сайта? - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь получить результат поиска по сайту, я использую метод отправки запросов для этого. Ниже вы можете увидеть ФОРМУ и ВХОДНЫЕ htmls из URL. Мне нужно получить каждый результат поиска при вводе формы.

Я пробовал код ниже , но он ничего не возвращает

import requests
from bs4 import BeautifulSoup

# FORM from website
# <form name="form1" method="post" action="payerOrVoenChecker.jsp">

# INPUT from the website
# <input type="text" name="voen" size="38" style="BACKGROUND-COLOR: #ffffff; BORDER-BOTTOM-STYLE: groove;
# BORDER-LEFT-STYLE: groove; BORDER-RIGHT-STYLE: groove; BORDER-TOP-STYLE: groove; COLOR: #000000; FONT-FAMILY:
# Tahoma, Arial; FONT-SIZE: 12px" value="">

request_headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Host': 'www.e-taxes.gov.az',
    'Origin': 'https://www.e-taxes.gov.az',
    'Referer': 'https://www.e-taxes.gov.az/ebyn/payerOrVoenChecker.jsp',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'YOUR USER AGENT',
}

voens = {2000460031,
         1000877741,
         1000877741,
         1500403661,
         1000877741,
         3000489411,
         1000877741,
         1802142932,
         }

tip = ['L',
       'P',
       ]

form_data = {
    'tip': tip,
    'voenOrName': 'V',
    'voen': voens,
    'name': '',
    'submit': '  Yoxla   ',
}


url = 'https://www.e-taxes.gov.az/ebyn/payerOrVoenChecker.jsp'

for voen in voens:
    form_data['voen'] = voen
    form_data['tip'] = tip
    response = requests.post(url, data=form_data, headers=request_headers)
    s = BeautifulSoup(response.content, 'lxml')
    sContent = s.findAll('table', {'class': 'com'})[0].findAll('tr', recursive=False)[1]
    outcome = sContent.get_text().strip()
    # .find("tr", recursive=False)
    print(outcome)

Ожидаетсярезультат будет в форме таблицы, я добавляю скриншот до и после поиска по сайту, выделена таблица, которую мне нужно получить

enter image description here enter image description here

1 Ответ

1 голос
/ 10 октября 2019

Вам не хватает других элементов, которые должны быть отправлены в теле запроса POST.

Попробуйте это:

request_headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.9',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Host': 'www.e-taxes.gov.az',
    'Origin': 'https://www.e-taxes.gov.az',
    'Referer': 'https://www.e-taxes.gov.az/ebyn/payerOrVoenChecker.jsp',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'YOUR USER AGENT',
}

form_data = {
    'tip': 'L',
    'voenOrName': 'V',
    'voen': '1700393071',
    'name': '',
    'submit': '  Yoxla   ',
}

response = requests.post(url, data=form_data, headers=request_headers)

Лучший способ выяснить этоэто переключиться на вкладку Сеть в инструментах разработчика в браузере. Ярлык в Chrome и Firefox - F12.

  • После того, как вы откроете Инструменты разработчика, перейдите на вкладку Сеть.
  • Теперь отправьте все запросы, которые вы хотите автоматизировать (например,(в этом случае нажмите «Отправить» после ввода идентификатора).

Появится список всех запросов, которые браузер отправляет за кулисы. Нажмите на тот, который соответствует вашему URL.

Справа откроется панель, которая показывает, какой метод (GET / POST) был использован, какие заголовки были переданы в запросе, какие данные были отправлены (в случаеPOST) и т. Д.

Все, что я сделал, это вставил заголовки запросов и данные формы из этой вкладки.

inspecting network tab

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...