Запрос Python, не позволяющий перенаправлять

#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 разве там нет.