#python #web-scraping #python-requests #request
Вопрос:
Я использую библиотеку запросов Python для очистки robots.txt данные из списка URL-адресов:
for url in urls:
url = urllib.parse.urljoin(url, "robots.txt")
try:
r = requests.get(url, headers=headers, allow_redirects=False)
r.raise_for_status()
extract_robots(r)
except (exceptions.RequestException, exceptions.HTTPError, exceptions.Timeout) as err:
handle_exeption(err)
В моем списке URL-адресов у меня есть эта веб-страница: https://reward.ff.garena.com . Когда я запрашиваю https://reward.ff.garena.com/robots.txt , я напрямую перенаправлен на https://reward.ff.garena.com/en . Однако я указал в своих параметрах запроса, что мне не нужны перенаправления allow_redirects=False
.
Как я могу пропустить такое перенаправление и убедиться, что у меня есть только domain/robots.txt
данные, вызывающие мой extract_robots(data)
метод?
Комментарии:
1. maby использует исключение HTTPSConnectionPool в except часть полезна
Ответ №1:
Вы точно знаете, что существует robots.txt в этом месте? Я отмечаю, что если я запрошу https://reward.ff.garena.com/NOSUCHFILE.txt что я получаю тот же результат, что и для robots.txt
Ответ №2:
allow_redirects=False
Единственное, что останавливается requests
при автоматическом следовании 302/location= responses — т. Е. Это не мешает серверу, к которому вы пытаетесь получить доступ, возвращать перенаправление в качестве ответа на ваш запрос.
Если вы получаете ответ такого типа, я предполагаю, что это указывает на то, что запрошенный вами файл недоступен, или какая-то другая ошибка, препятствующая доступу к нему, возможно, в общем случае доступа к файлам это может указывать на необходимость аутентификации, но для robots.txt это не должно быть проблемой — проще всего предположить, что robots.txt разве там нет.