Jan 29

Сидел сегодня скрипт писал для выкачивания с одного ресурса нескольких сотен страниц, дальше нужно будет вытащить оттуда все остальные страницы, ссылки на которые присутствуют на этих паре сотен страниц, так что количество измеряется несколькими тысячами. Блин, сайт писан грамотным прогером – стоит защита от количества запрашиваемых страниц с IP за единицу времени. Разлок идет по отсылке письма, тоесть просто ввести каптчу не удастся – надо написать собщение через контакт-форму (также присутсвует каптча)…

Выход один – использовать прокси. Так вот постала задача: мне нужно вытащить n-ное количество станиц с этого ресурса с 90-100% результатом (потеря 10% допускается). И вот тут постал вопрос: как контролировать каждый поток мульти CURL’а? Нужно, если прокси умер (а они могут умереть в каждый момент), то брать следующий по списку (алгоритм задать не проблема) и снова грузить страницу, или Если не загрузилась страница (по таймауту или другой причине) тоже снова ее загрузить… Сам алгоритм понятен, но сейчас пытаюсь реализовать это на практике.

Если у кого есть примеры – киньте в меня или ссылку дайте, где про такое можно почитать…

ЗЫ. Про сам Multi CURL не надо. Нужно о контроле этих самых потоков и их обработке.

ЗЫЫ. На мысль пришло: получать результат запроса страницы и если результат пустой или ошибка и т.д., тогда записывать адрес не полученной страницы в новый массив и потом этот массив прогонять как основной и формировать новый “ошибочный” массив. И так до тех пор, пока массив с “ошибочными” адресами не будет пуст.

8 Responses to “Multi CURL”

  1. Аршавин Says:

    Я тоже помню долго голову ломал над этим вопросом..ответа так и не нашел :)

  2. Herz Says:

    там легко могу подарить наработки

  3. Василий Says:

    Понравился дизайн вашего блога и его статьи! Пишите еще. Подписался на вашу rss-ленту.
    С уважением, Василий. Удачи!

  4. serverok Says:

    2 Herz: если не трудно стукнись ко мне в аську #340-66-00-33

    2 Василий: Спасибо, постараюсь оправдать ваш кредит доверия.

  5. Aшветия Says:

    Herz
    а как с вами связаться? :)

  6. ioh Says:

    Уважаемый Владелец блога, Если решение найдено его просто необходимо тут обнародовать

  7. bravostd Says:

    Тоже интересует ответ на этот вопрос

  8. Peter Says:

    while (1) {
    $buf = $cc->get($url);
    if ( preg_match(“/href=\”\/tirerack.css\”/”,$buf) ) {
    break;
    } else {
    $round_index = rand(0, $count_proxy);
    $cc->proxy = $proxies[$round_index]['proxy'];
    }
    }
    У меня работает. Страница будет запрашиваться, когда будет выбран работающий прокси. И такая проверка при каждом запросе.

Leave a Reply

google