Соскреб в сети с Python с использованием ошибки BeautifulSoup 429

1

Fist Я должен сказать, что я совершенно новый для веб-соскабливания с Python. Я пытаюсь очистить данные, используя эти строки кодов

import requests
from bs4 import BeautifulSoup
baseurl ='https://name_of_the_website.com'
html_page = requests.get(baseurl).text
soup = BeautifulSoup(html_page, 'html.parser')
print(soup)

В качестве вывода я не получаю ожидаемую страницу Html, а другую страницу Html, в которой говорится: Misbehaving Content Scraper. Используйте robots.txt. Ваш IP-адрес ограничен лимитом

Чтобы проверить проблему, я написал:

try:
page_response = requests.get(baseurl, timeout =5)
 if page_response.status_code ==200:
   html_page = requests.get(baseurl).text
   soup = BeautifulSoup(html_page, 'html.parser')

 else:
  print(page_response.status_code)
except requests.Timeout as e:
print(str(e))

Затем я получаю 429 (слишком много запросов).

Что я могу сделать для решения этой проблемы? Означает ли это, что я не могу распечатать Html страницы и не мешает ли я очистить содержимое страницы? Должен ли я вращать IP-адрес?

  • 1
    429 указывает на то, что вы запускали свой код слишком много раз, а не на то, что с этим кодом что-то не так.
  • 2
    Возможный дубликат Как избежать ошибки HTTP 429 (Too Many Requests) python
Показать ещё 1 комментарий
Теги:
python-requests
web-scraping
beautifulsoup

1 ответ

0
Лучший ответ

Если вы только нажимаете страницу один раз и получаете 429 возможно, вы не слишком сильно наносите им слишком много. Вы не можете быть уверены, что ошибка 429 точна, это просто то, что вернулся их веб-сервер. Я видел, как страницы возвращают код ответа 404, но страница была в порядке, а 200 ответов на законных недостающих страницах - просто неправильно сконфигурированный сервер. Они могут просто вернуть 429 из любого бота, попробуйте сменить User-Agent на Firefox, Chrome или "Robot Web Scraper 9000" и посмотреть, что вы получаете. Как это:

requests.get(baseurl, headers = {'User-agent': 'Super Bot 9000'})

объявить себя ботом или

requests.get(baseurl, headers = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'})

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

Если вы на самом деле их сильно ударяете, вам нужно спать между звонками. Это ответ на серверный сервер, полностью контролируемый ими. Вы также захотите изучить, как ваш код взаимодействует с файлом robots.txt, который обычно находится в корневом каталоге веб-сервера с правилами, по которым вам будет нужен ваш паук.

Вы можете прочитать об этом здесь: Parsing Robots.txt в python

Spidering the web - забава и сложность, просто помните, что вы можете быть заблокированы в любое время любым сайтом по любой причине, вы их гость. Так протрите красиво :)

  • 0
    Спасибо за ответ, я думаю, вы поняли. Однако мне не удалось ни с помощью подмены пользовательского агента, которую вы мне предложили, ни с попыткой ротации IP. Как я могу понять, если меня заблокировали?
  • 0
    Сайты могут блокировать только по IP-адресу, или они могут попытаться передать вам cookie и, если вы его не принимаете, они предполагают, что вы бот, и иногда отклоняют ваш запрос. Тем не менее, большинство сайтов хотят быть «паучками», именно так они генерируют трафик. Вы также всегда можете связаться с веб-мастером (если это небольшой сайт). Если вы нашли мой ответ полезным, примите его :) и добро пожаловать в StackOverflow! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню