#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:
Итак, есть несколько причин, по которым вы получаете то, что получаете:
- Ваши заголовки выглядят неправильно
- Данные, которые вы отправляете, содержат некоторые дополнительные переменные
- Для отображения таблицы на веб-сайте требуются файлы 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"
, он работает нормально.