Очистка Transfermarkt.de с помощью Python (pandas, bs4) - избегайте 403 - PullRequest
0 голосов
/ 02 августа 2020

всех,

Я хотел бы просмотреть историю травм всех игроков. Для этой цели я создал Python скребок.

У меня есть функция, в которой я могу указать player_id_start и player_id_end, а затем запускается скребок. Скребок частично работает с pandas и частично с BeautifulSoup.

Примерно через 10 игроков я получаю status_code 403 от Transfermarkt.de. Я предполагаю, что какая-то система защиты блокирует мои запросы. Примерно через 5 минут я снова «разблокирован».

Я что-то забыл или мне просто нужно установить несколько таймеров сна? Я тоже не хочу захлопывать сервер.

Надо ли обращать внимание на что-то с заголовком или вообще на запросы? В настоящее время используется следующее:

requests.get(url, headers=heads)

heads = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'}

Я уверен, что у вас есть еще несколько мест, с которых я могу начать. Ведь идентификаторов игроков 600 000.

Спасибо

1 Ответ

0 голосов
/ 02 августа 2020

У вас есть несколько вариантов, иногда создание правильного заголовка является проблемой, но это можно сделать, изучив инструменты разработчика в браузере - хорошо видео как работать с chrome инструментами разработчика или другими one .

Если я буду в вашем случае, я также сначала попробую selenium (или node puppeteer с плагином puppeteer-extra- plugin-stealth или golang chromedp ), это может привести к тому, что вы не будете заблокированы (или вы будете заблокированы после гораздо большего количества запросов, чем 10), но очистка будет медленнее. Но если эти инструменты будут работать без проблем, высока вероятность того, что создание правильного заголовка должно решить ваши проблемы.

Другой относительно дешевый вариант - изменить и расширить вашу функцию очистки и развернуть ее на aws лямбда или облачные функции Google - для обоих у вас есть несколько бесплатных квот в месяц. Вы можете сгенерировать solid этих функций в облаке, и вместо прямого вызова веб-сайта вы вызовете функцию в облаке, функция вызовет веб-сайт и повторно отправит вам ответ, и когда вы получите код состояния ответа 403, вы будете использовать другую функцию. Это решение хорошо, если вы будете удалять эти данные более одного раза. Это очень похоже на использование прокси.

...