Этот вопрос закрыт для ответов, так как повторяет вопрос Как парсить без бана?

Как не попасть в блэк-лист при многопоточном парсинге?

Написал многопоточный парсер на php с использованием библиотеки guzzle . Он проходит по большому числу сайтов и берет контент одной страницы. Со временем вместо контента возвращается 302 код ответа сервера. Даже не со временем, я провел пару тестовых запусков:
1. Всего 300 сайтов парсятся в 100 потоков.
2. 300 сайтов парсятся в 300 потоков.
Во втором варианте 302 код начал возвращаться сразу же с сообщение о том что мой ip находиться в блэк листе, а в первом все нормально спарсилось. При этом первый вариант я запускал после второго, то есть если мой ip в блэк листе, то почему парсинг по 100 сайтов после парсинга по 300 отработал нормально?

Какие есть способы свести на нет эту проблему или хотя бы уменьшить количество сайтов, отдающих 302 код ответа? Возможно ли обойтись без смены ip адресов?
  • Вопрос задан
  • 1143 просмотра
Пригласить эксперта
Ответы на вопрос 3
kotomyava
@kotomyava
Системный администратор
Использовать большой список прокси, и делать запросы через них.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Пока ваш парсер по поведению не отличается от обычных пользователей сайта - он незаметен.
Достаточно корректно эмулировать виртуального пользователя (браузер, JS-события, периодичность запросов и правильность навигации), чтобы не быть забаненым.
Вкратце: запрос одной страницы на одном домене - не чаще одного раза в 15 секунд.
Ответ написан
latteo
@latteo
Один из вариантов бана получается, когда много сайтов висят на одном сервере.
Самый простой способ обхода - определить ip сайтов и делать паузы при запросах на одинаковые ip.
В теории, механизм таких пауз в курле должен быть встроен и есть вероятность, что этим можно управлять из php. Для подробностей читайте маны ;)

Более сложный и более редкий вариант - на один сервер несколько ip или несколько серверов за одним фаерволом, который воспринимает множественные запросы как DDOS. Здесь уже необходимо вычислять подсеть или даже все подсети ДЦ для установки пауз.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы