Парсер сниппетов гугла

Тема в разделе "PHP", создана пользователем dig555, 6 июн 2008.

Модераторы: latteo
  1. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    362
    Симпатии:
    148
    Мне очень нужен серверный парсер снипетов гугла. Нашёл такой вот код:
    PHP:
    <?
    require(
    "curl.php");
    $google "http://www.google.com/search?client=opera&rls=en&sourceid=opera&ie=utf-8&oe=utf-8&q=";
    $query "sex";
    $request utf8_encode($google.$query);
    $text _get($request);
    function 
    google_parse($text,$type="res") { //type = res|count
    if (preg_match(/of\sabout\s<b>([\d,]+)</, $text$toks)) {
    $res str_replace(array(",","."," "),array("","",""),$toks[1]);
    }
    $result_count $res;
    if (
    $type === "count") return $result_count;
    preg_match_all(%class=g.*?<a href="([^"]+)".*?>(.*?)</a>.*?<font size=-1>(.*?)\.\.\.%, $text$res, PREG_PATTERN_ORDER);
    foreach (
    $res[2] as $num=>$value$res[2][$num] = htmlspecialchars_decode(strip_tags($value),ENT_QUOTES);
    foreach (
    $res[3] as $num=>$value$res[3][$num] = htmlspecialchars_decode(strip_tags($value),ENT_QUOTES);
    array_splice(
    $res,0,1);
    return 
    $res;
    }
    $result_count = google_parse($text,"count");
    $serp = google_parse($text);
    print_r(
    $res);
    ?>
    При запуске ругается на регулярку в 8 строке. Знающие, посмотрите плз, в чём там ошибка:thenks: А то я в регэкспах ни бум-бум.
     
  2. Dimkich

    Dimkich Постоялец

    Регистр.:
    10 июл 2007
    Сообщения:
    119
    Симпатии:
    36
    слушай где ты это достал?:)
    оно не работает потому, что там целая куча синтаксических ошибок. Я уже не говорю про, что даже если их исправить, то он всё равно ничего не будет парсить. Просто потому, что регулярные выражения составлены неверно.
    Сложилось такое впечатление, что проблема в кодировке.
    Типа скрипт был написан в одной кодировке, а ты пересохранил в другую и очень много спец символов просто потерялись.
    http://www.nulled.ws/showthread.php?t=3898&page=5
    Возможно тут ты найдёшь то, что тебе нужно.
     
    SteFF и dig555 нравится это.
  3. ziavra

    ziavra Постоялец

    Регистр.:
    14 сен 2006
    Сообщения:
    123
    Симпатии:
    55
    Переделай только само получение странички с гугла, например с помощью curl
    PHP:
        // Returns parsed Google's SERP. Returns array
        // $res_type=1 - returns urls & anchors
        // $res_type=2 - returns snippets
        // $res_type=3 - returns urls, anchors and snippets
        
    function google_serp_parsed($keyword$num=10$res_type=1)
        {
            
    // Parse Google SERP
            //$SerpParsed[][3];    // [][0] - URL; [][1] - Ancor; [][2] - Snippet
            
    $Delimiter[0] = '<h2 class=r><a href="';
            
    $Delimiter[1] = '"';
            
    $Delimiter[2] = '>';
            
    $Delimiter[3] = '</a>';
            
    $Delimiter[4] = '"><font size=-1>';
            
    $Delimiter[5] = '<span class=a>';
        
            
    /*// MSN
            $Delimiter[0] = '><h3><a href="'
            $Delimiter[1] = '"';
            $Delimiter[2] = '>';
            $Delimiter[3] = '</a>';
            $Delimiter[4] = '</h3>';
            $Delimiter[5] = '<ul><li';
            */

            
    $url "http://www.google.com/search?num=".$num."&hl=en&q=".urlencode($keyword);
            
    $browser = new browser();
            
    $browser->_COOKIE_FILE ROOT."temp.cookie";
            
    $browser->clearCookie();
            
    $temp $browser->get($url);
            unset(
    $browser);
            if (!isset(
    $temp["result"])) return;
            
    $SerpContents $temp["result"];
        
            
    $SubstrStart $SubstrEnd 0;
            
    $ResultsNum=0;
            switch(
    $res_type)
            { 
             case 
    1
                 
    $beg=0
                 
    $end=2;
                 break;
             case 
    2:
                 
    $beg=2
                 
    $end=3;
                 break;
             case 
    3:
                 
    $beg=0
                 
    $end=3;
                 break;
            }
                     

            while(
    1)
            {
                for(
    $i $beg$i $end$i++)
                {
                    
    $SubstrStart strpos($SerpContents$Delimiter[$i*2], $SubstrEnd);
                    if(
    $SubstrStart === false)
                        break;
                    
    $SubstrStart += strlen($Delimiter[$i*2]);
                    
    $SubstrEnd   strpos($SerpContents$Delimiter[$i*2+1], $SubstrStart);
                    if(
    $SubstrEnd === false)
                        break;
                    
    $SerpParsed[$ResultsNum][$i] = substr($SerpContents$SubstrStart$SubstrEnd $SubstrStart);
                }
                if((
    $SubstrStart === false) || ($SubstrEnd == false))
                    break;
                
    $ResultsNum++;
            }
            return 
    $SerpParsed;

        }
     
    dig555 нравится это.
  4. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Тоже необходим парсер снипетов гугла. Нашел вот такой код, помогите освоить, пожалуйста. За предложенный ранее браться не стал, с curl пока вообще даже близко не знаком. только-только осваиваю пхп :)

    PHP:
    <?php 

        
    //Объявляем функцию парсинга выдачи
        
    function parse_serp($engine$query)
        {
            switch (
    strtolower($engine))
            {
                case 
    'google':
                    
    $request 'http://www.google.com/search?hl=en&q='.urlencode(trim($query));
                    
    $pattern '/cC[itIT]*eE/';
                    
                    
    $result file_get_contents($request);
                    
                    if(
    preg_match_all($pattern$result$matches))
                    {
                                for (
    $i=0$i<count($matches[0]); $i++)
                                {
                                    
    $link $matches[2][$i];
                                    
                                    
    $serp[] = $link;
                                }
                    }
                    break;
                    
                case 
    'yahoo':
                    
    $request 'http://search.yahoo.com/search?ei=UTF-8&n=100&b=0&vl=&p='.urlencode(trim($query));
                    
    $pattern '/<a class=yschttl.*(http%3a\/\/.*)">(.*)<\/a>.*<div class=yschabstr>(.*)<\/div>/isU';
                    
                    
    $result file_get_contents($request);
                    
                    if(
    preg_match_all($pattern$result$matches))
                    {
                                for (
    $i=0$i<count($matches[0]); $i++)
                                {
                                    
    $link urldecode($matches[1][$i]);
                                    
                                    
    $serp[] = $link;
                                }
                            }
                    break;
                    
                case 
    'msn':
                    
    $request 'http://search.msn.com/results.aspx?count=50&first=0&mkt=&q='.urlencode(trim($query));
                    
    $pattern '/<li.*><h3><a href=".*" gping="\/GLinkPing.aspx\?\/_1_9SE\/1\?(.*)&amp;&amp;.*">(.*)<\/a><\/h3><p>(.*)<\/p>/isU';
                    
                    
    $result file_get_contents($request);
                    
                    if(
    preg_match_all($pattern$result$matches))
                    {
                                for (
    $i=1$i<count($matches[0]); $i++)
                                {
                                    
    $link urldecode($matches[1][$i]);
                                    
                                    
    $serp[] = $link;
                                }
                            }
                            
                    break;
            }
            
            return 
    $serp;
        }
        
    //Стартуем функцию парсинга
        
    parse_serp("google""cars");
        
    //Выводим полученные результаты
        
    print_r($result);
    ?>
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    phillip нравится это.
  6. viperson

    viperson Создатель

    Регистр.:
    13 авг 2007
    Сообщения:
    11
    Симпатии:
    0
    да уж такое бывает иногда
     
  7. ToT

    ToT Постоялец

    Регистр.:
    13 фев 2007
    Сообщения:
    57
    Симпатии:
    7
    Народ, а существует в природе статьи объясняющие на примере написания своих скриптов, для сео... поделитесь...
     
  8. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    362
    Симпатии:
    148
    Угу! Книга называется "PHP5 на примерах. Кузнецов, Симдянов, Голышев" :D
    Врядли, есть такое. Разве, что вот это:

    http://earnway.ru/page/poster
     
  9. Elefant

    Elefant Создатель

    Регистр.:
    8 фев 2009
    Сообщения:
    15
    Симпатии:
    2
    мне больше всего помог сайт php.net
    вводишь название функции и смотришь как с ней умелые прогеры обращаются
     
  10. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    357
    Симпатии:
    36
    Чтобы не делать новую тему...
    Проблема в парсинге русского и других языков кроме енг.
    Есть у кого решения по парсингу (открытый пхп код) снипетов на русском или арабском?