ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

PHP парсер + демон
  #1  
Старый 15.06.2009, 15:55
Аватар для [NiGHT]DarkAngel
[NiGHT]DarkAngel
Участник форума
Регистрация: 29.03.2005
Сообщений: 138
Провел на форуме:
812087

Репутация: 129
По умолчанию PHP парсер + демон

Есть парсер на 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 ключевых слов и обрабатывать их паралельно ... Зарание благодарю за помошь ...

ЗЫ За код прошу сильно не бить , только учусь
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Books PSalm69 Избранное 248 27.10.2009 04:52
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ