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

Основной принцип обхода защиты от парсинга - ваш парсер должен вести себя так, как вел бы себя человек, зашедший на сайт.

Задержки

Самое простое, что можно сделать - это установить задержки между запросами к чужому сайту.

Задержки устанавливаются с помощью PHP функции sleep, которая параметром принимает время в секундах - на это время скрипт просто "засыпает", а потом его выполнение начинается заново.

Важно: ставьте неравномерные задержки, иначе скрипт, посылающий запросы с частотой, к примеру, ровно 5 секунд, легко отслеживается и банится.

Еще: время задержки для каждого сайта следует подбирать индивидуально.

Смена ip

Недостатком предыдущего метода является то, что существенно падает скорость парсинга из-за этих задержек. Можно воспользоваться другим способом - сменой ip (так как сайты банят парсер по ip компьютера с парсером).

Если ваш парсер расположен на локальном компьютере, то смена ip выполняется очень просто - нужно всего лишь перезагрузить роутер (коробочка с интернетом). В этом случае ваш ip сменится (если, конечно, он не статичный) - и можно продолжать парсить дальше.

Если же действие происходит на сервере - то есть два способа.

Первый - купить дополнительные ip адреса на хостинге. В этом случае переключение ip при парсинге выполняется следующей опцией CURL: curl_setopt($curl, CURLOPT_INTERFACE, 'ip адрес').

Второй способ - купить прокси-сервера на специальных сервисах (можно использовать и бесплатные прокси, но как показывает практика - они особо не работают). В случае с прокси переключение ip при парсинге выполняется следующей опцией CURL: curl_setopt($curl, CURLOPT_PROXY, 'ip адрес').

Продвинутая работа с CURL

См. статью - там описана продвинутая работа с CURL.

Рекомендации

Рекомендую делать следующие вещи для имитации браузера:

1. Отправляйте и получайте куки.

2. Отправляйте http заголовки.

3. Имитируйте браузер отправляя опцию CURLOPT_USERAGENT: curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');

Работа с https

Иногда бывает такое, что сайт работает через протокол https, а не http. В этом случае вам понадобятся следующие две опции: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); . Используйте их, и проблема будет решена.

Мобильная версия сайта

Совет: часто мобильная версия сайта менее защищена. Например, в десктопной версии сайта телефоны могут быть картинками, а в мобильной - нет.