0

Скрейпинг экрана: как обойти "Ошибка HTTP 403: запрос запрещен robots.txt"

12

Заголовок: Как обойти ошибку HTTP 403: доступ запрещен robots.txt при использовании mechanize и BeautifulSoup?

Я столкнулся с проблемой при попытке получить доступ к данным с сайта barnesandnoble.com. При выполнении запроса я получаю следующую ошибку:

httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt

Имеется ли способ обойти эту ситуацию? Меня интересует, только ли связаться с владельцем сайта (barnesandnoble.com) для разрешения доступа, поскольку я разрабатываю ресурс, который, по моему мнению, мог бы принести им дополнительные продажи. Не понимаю, почему они ограничивают доступ на определенной глубине.

Я использую библиотеки mechanize и BeautifulSoup на Python 2.6.

Надеюсь на помощь в поиске обходного решения.

5 ответ(ов)

2

Вам нужно игнорировать файл robots.txt. Для этого в библиотеке mechanize вы можете настроить браузер следующим образом:

br = mechanize.Browser()
br.set_handle_robots(False)

Таким образом, set_handle_robots(False) отключает соблюдение правил, указанных в файле robots.txt, и ваши запросы будут отправляться без ограничений, которые он накладывает.

0

Вы можете попробовать обойти систему, изменив свой user agent, чтобы создать видимость, будто вы - человек, а не робот. Однако это может привести к юридическим последствиям с Barnes & Noble. Почему бы вместо этого не обратиться в их отдел разработки бизнеса и не попробовать убедить их выдать вам специальное разрешение? Они, возможно, просто пытаются избежать сканирования своего сайта определёнными типами роботов, такими как системы сравнения цен, и если вы сможете убедить их в том, что вы не из их числа, подписать контракт и т.п., они могут быть готовы сделать для вас исключение.

Использование "технического" обходного метода, который просто нарушает их правила, записанные в robots.txt, - это рискованный подход с точки зрения закона, который я бы никогда не рекомендовал. Кстати, как выглядит их файл robots.txt?

0

Вот код, который позволяет сделать корректный запрос с использованием библиотеки mechanize:

import mechanize

br = mechanize.Browser()
br.set_handle_robots(False)  # Игнорируем правила robots.txt

# Устанавливаем заголовок User-Agent
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

# Открываем указанный URL
resp = br.open(url)

# Выводим заголовки ответа
print(resp.info())  # заголовки

# Выводим содержимое ответа
print(resp.read())  # контент

Обратите внимание на то, что мы отключаем обработку файла robots.txt, чтобы избежать ограничений, а также устанавливаем пользовательский агент, чтобы сайт не блокировал запросы от скриптов.

0

Mechanize автоматически следует указаниям из robots.txt, но это поведение можно отключить, если у вас есть разрешение или вы хорошо обдумали этические аспекты.

Чтобы игнорировать robots.txt, установите флаг в вашем браузере:

browser.set_handle_equiv(False)

Также не забудьте ограничить количество ваших запросов, чтобы не создавать избыточную нагрузку на их сайт. Это также снижает вероятность того, что вас обнаружат и забанят.

0

Ошибка, которую вы получаете, не связана с User-Agent. Библиотека mechanize по умолчанию автоматически проверяет директивы robots.txt, когда вы используете ее для навигации по сайту. Чтобы отключить это поведение, используйте метод .set_handle_robots(False) у объекта механизма (mechanize.Browser).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь