На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Парсер, чекер и база бесплатных прокси


Для одного проекта понадобилось иметь прокси. Много, даже очень много прокси. Проблема была в том, что сервер сайта донора блокировал (выдавал капчу) как по времени, так и по частоте обращения. Через запросов 30 ip блокировался на сутки. А нам (заказчику) надо было получать информацию как можно быстрее – счет шел на тысячи запросов за ограниченный промежуток времени. Решение – создать базу данных своих прокси. Бесплатных. Однако, это оказалось не так уж просто.

Где брать

Первая проблема состояла в том: а где, собственно говоря, брать эти самые бесплатные прокси? Не, на самом деле сайтов много, но большинство из них либо копируют у друг друга, либо же ставят защиты от парсинга.

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

Зависеть от одного сайта, конечно же, не очень хорошо, но будем решать проблемы по мере их поступления

Устаревание

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

Сначала я думал сразу при сборщике поставить проверку, но нам требовались постоянно актуальные поэтому решено запустить еще процесс – чекер прокси.

Проверка (чекер)

Перед основным парсером основного сайта (а не с прокси, надеюсь, вы не запутались) мы запускаем чекер прокси. Точнее, запускается параллельно (парсер – раз в минуту, чекер – раз в две минуты), но идущий на 50 позиций вперед. Таким образом мы получаем актуальнейшие прокси и основной паук, ползающий по сайт донору, не тратит время на их проверку.

Интересно, что проверка прокси оказалась не простейшей задачей. Простой, но не простейшей. То есть вот такой:

$ip = $row['ip'];
$port = $row['port'];
$fp = @fsockopen($ip, $port, $errno, $errstr, 10);
if($fp) {//прокси рабочий}
Проверки не хватит. Почему? Ну сокеты открываются, порт нормально, но сам прокси-сервер может выдать что-то типа «Доступ запрещён». Так что лучше дополнительно инициализировать курл и использовать такой код:

$proxy = $ip.":".$port;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_PROXY, $proxy);
$res = curl_exec($ch);$pos = stripos($res, "ERR_ACCESS_DENIED");
if (($pos === false)
Я сначала думал создать список «плохих» ответов:
  • ERR_ACCESS_DENIED
  • Bad Request
  • Доступ запрещен
  • Доступ заблокирован
  • Service Unavailable
  • Network Access Message
И в некоторых случаях так действительно можно поступать. Но в нашем случае проще и правильнее сравнивать не то, что может быть, а то, что должно быть. Иными словами часть текста страницы, которая будет всегда. Например, заголовок или что-то внутри.

$pos_true = stripos($res, "То, что есть всегда на странице");
if  (!$pos_true)) {
Плюсом этого подхода является то, что можно отсеять сразу те прокси, которые уже наш донор заблокировал (не мы же одни ими пользуемся и такое бывает).

Хэппи энд

В конце концов все же все эти проблемы удалось решить. Теперь у меня есть собственная база прокси, которая постоянно пополняется и обновляется. Актуальные бесплатные прокси в любое время, и доступные для работы в любом формате. За плату я вам помогу в подобном проекте - пишите.





Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, прокси, парсинг

Читайте также:




Урок 1. Введение в параллельное программирование C#
Компьютерная анимация


© upread.ru 2013-2020
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.