Есть парсер на php PHP: { /*Сколько страниц парсим*/ $max_str=5; /*Начальная позиция*/ $cur_str=0; /*Флаг о том что ненайдена позиция*/ $found=false; //Преобразуем ключевик для яндекса $keyword_enc = urlencode($key_word); //Инициализируем счетчик $position = 0; /*Список прокси серверов для парсинга*/ $proxy=Array(); //Формируем Cookie для региона $cookie=""; while(($cur_str<$max_str) && ($found!=true)) { $i_proxy = rand(0,5)+1; $content=""; $ch = curl_init("http://yandex.ru/yandsearch?p=$cur_str&text=$keyword_enc"); $curlOptions = array(CURLOPT_HEADER => 0, CURLOPT_NOBODY => 0, CURLOPT_VERBOSE => 1, CURLOPT_RETURNTRANSFER => 0, CURLOPT_FOLLOWLOCATION => 0, CURLOPT_POST => 0, CURLOPT_PROXY=>$proxy[$i_proxy], CURLOPT_COOKIE => $cookie, CURLOPT_POSTFIELDS => $queryBody); $content = position::curl_connect($curlOptions,$ch); if($content!="") { $total=preg_match_all('#.*<a tabindex="(.*?)" onmousedown="(.*?)" href="(.*?)" target="(.*?)">.#i', $content, $forms ); $cur_match=0; //echo $content."<br>"; //echo "Total = ".$total."<br>"; while($cur_match!=$total) { $position++; $tmp=preg_match('#http://(.*?)/#i',$forms[3][$cur_match],$domains); if(substr($domains[1],0,4) == "www.") { $cur_domain = substr($domains[1],4,strlen($domains[1])); } else { $cur_domain = $domains[1]; } if($cur_domain==$site_domain) { $found=true; break; } $cur_match++; } } $cur_str++; } if($found==false) { $position = 0; } return $position; } Функция curl_connect PHP: function curl_connect($curlOptions,$ch) { /*Устанавливаем опции для curl*/ curl_setopt_array($ch, $curlOptions); /*Инициализируем буфер вывода*/ ob_start(); /*Получаем страничку*/ curl_exec($ch); /*Заносим значения буфера в переменную*/ $content = ob_get_contents(); /*Закрываем соединение curl'a*/ curl_close($ch); /*Очищаем буфер*/ ob_end_clean(); return $content; } Бегает он получает странички,собирает позиции работает вообщем как надо... но одно НО , уж слишком медленно все и долго занимается время парсить допустим около 1000 слов ... хотелось бы узнать есть какие-то способы сделать многопоточным этот процесс и демонизировать ... ну про демонизацию я нашел инфу, читаю ... а вот с многопоточностью не ясно ... вариант это делать или нет ... на данный момент он берет из базы по 1 слову и ишет в яндексе его , если поставить например 5 слов за раз ... то это уже получается большая нагрузка на сервер и скрипт не успевает обработаться и вываливается ошибка о времени выполнения скрипта,set_time_limit(0) не помогает ... да и все равно это будет очень и очень долго ... соответственно задача вот в чем ... хотелось бы например брать сразу по 10-20 ключевых слов и обрабатывать их паралельно ... Зарание благодарю за помошь ... ЗЫ За код прошу сильно не бить , только учусь
Код не смотрел, но скажу - можно много потоков(запросов) обработать самим курлом. Ну а потом уже, в один поток отпарсить результаты. Правда поисковики нелюбят много запросов. Гугл особенно.
ну для этого в курле есть параметр прокси ... и при каждом запросе страничке можно подменить ип... сообственно говоря так это и работает
Если использовать мулти курл ... то получится такая ситуация ... я сгенерю пать страничек ... он их все получит ~ 250 Кб ... а нужный мне домен находиться на первой странничке .... получается все остальное он зря грузил ...
Ты сам то понял, чего хочешь ? Вот тебе код на Python, надеюсь поймёшь Code: import urllib def Telepat(domain): data = urllib.urlopen("http://mind.yandex.ru").read() page_number = get_domain_postion_page(data) return page_number Pos = Get_Postion(page_number) print Pos Вот то что тебе нужно