Таблица POST-запросов Python3

#python #post #python-requests

#python #Публикация #python-запросы

Вопрос:

Я пытаюсь очистить таблицу https://www.domeinquarantaine.nl /, однако по какой-то причине он не дает ответа таблицы

 #The parameters
baseURL = "https://www.domeinquarantaine.nl/tabel.php"
PARAMS = {"qdate": "2019-04-21", "pagina": "2", "order": "karakter"}
DATA = {"qdate=2019-04-21amp;pagina=3amp;order="}
HEADERS = {"Host": "www.domeinquarantaine.nl",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Referer": "https://www.domeinquarantaine.nl/",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Content-Length": "41",
"Connection": "keep-alive",
"Cookie": "_ga=GA1.2.1612813080.1548179877; PHPSESSID=5694f8e2e4f0b10e53ec2b54310c02cb; _gid=GA1.2.1715527396.1555747200"}

#POST request
r = requests.post(baseURL, headers = HEADERS, data = PARAMS)

#Checking the response
r.text
  

Ответ состоит из странных токенов и вопросительных знаков

Итак, мой вопрос в том, почему он возвращает этот ответ? И как это исправить, чтобы в конечном итоге получить очищенную таблицу?

Комментарии:

1. если страница использует JavaScript для добавления данных, вы не сможете получить их с помощью запросов. Он не может запускать JavaScript. Вы можете использовать Selenium для управления веб-браузером, который будет загружать страницу и запускать JavaScript. Или вам нужно проверить все запросы со страницы на сервер, чтобы найти ulr, который используется JavaScript для получения данных.

2. откройте веб-браузер, отключите JavaScript, и вы увидите, что requests может получиться.

3. используя DevTools в Chrome / Firefox, вы должны увидеть запрос POST на URL https://www.domeinquarantaine.nl/tabel.php , и он отправляет обратно HTML с таблицей.

Ответ №1:

Откройте веб-браузер, отключите JavaScript, и вы увидите, что requests может получиться.

Но при использовании DevTools в Chrome / Firefox (вкладка Network , XHR запросы фильтра) вы должны увидеть запрос POST на url https://www.domeinquarantaine.nl/tabel.php и он отправляет обратно HTML с таблицей.

Если вы откроете этот URL-адрес в браузере, вы увидите таблицу — так что вы можете получить это событие с помощью GET, но с помощью POST вы, вероятно, можете фильтровать данные.


После написания этого объяснения я увидел, что у вас уже есть этот URL-адрес в коде — вы не упомянули его в описании.

У вас другая проблема — вы устанавливаете

 "Accept-Encoding": "gzip, deflate, br"
  

итак, сервер отправляет сжатый ответ, и вы должны его распаковать.

Или используйте

 "Accept-Encoding": "deflate"
  

и сервер отправит несжатые данные, и вы увидите HTML с таблицей

Ответ №2:

Итак, есть несколько причин, по которым вы получаете то, что получаете:

  1. Ваши заголовки выглядят неправильно
  2. Данные, которые вы отправляете, содержат некоторые дополнительные переменные
  3. Для отображения таблицы на веб-сайте требуются файлы cookie

Это можно легко исправить, изменив data headers переменные и и добавив requests.session() в свой код (который будет автоматически собирать и вводить файлы cookie)

В целом ваш код должен выглядеть следующим образом:

 import requests

session = requests.session()
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0", "Accept": "*/*", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate", "Referer": "https://www.domeinquarantaine.nl/", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "DNT": "1", "Connection": "close"}
data={"qdate": "2019-04-20"}

session.get("https://www.domeinquarantaine.nl", headers=headers)
r = session.post("https://www.domeinquarantaine.nl/tabel.php", headers=headers, data=data)

r.text
  

Надеюсь, это поможет!

Комментарии:

1. Что заставляет вас говорить, что для просмотра таблицы требуются файлы cookie? Таблица отлично отображается с ответом @furas, который не включает сеанс.

2. @glhr Я пытался удалить файлы cookie из своего кода, и, похоже, это не сработало 🙂

3. Если вы берете код OP и просто меняете "Accept-Encoding" (в заголовке) на "deflate" or "utf-8" , он работает нормально.