Google Серп

Тема в разделе "Регулярные выражения", создана пользователем bolyk, 16 апр 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. bolyk

    bolyk

    Регистр.:
    21 авг 2006
    Сообщения:
    308
    Симпатии:
    210
    Уважаемы помогите, пожалуйста решить проблему с бяном:
    нужно получить первую ссылку(линк без анкора) из выдачи гугла.
    PHP:
    $linkfirst file("C://goo/link.txt");
    $key file("C://goo/keywords.txt");

    for(
    $i=0;$i<=count($key);$i++){
            
    // navigate to google
            
    $content file_get_contents("http://www.google.com/search?q=".urlencode($key[$i]." site:".$linkfirst[0])."&ie=utf-8");
            
    flush();
            
    sleep(1);
            echo 
    $content;
            
    preg_match_all('<cite>(.*)<\/cite>!siU',$content,$snippet);    
            echo 
    $snippet[0][$i]."</br>";        
            
    // wait on browser        
            
    file_put_contents("C://goo/rez.txt",$key[$i]."|".strip_tags($snippet[0][$i])."\r\n"FILE_APPEND);
            }
    мое калека не работает совсем. Уважаемые, помогите пожалуйста.
     
  2. Oleg_Ci

    Oleg_Ci Создатель

    Регистр.:
    11 окт 2009
    Сообщения:
    25
    Симпатии:
    7
    Видимо у ТС ошибка в регулярке
    Так вроде парсит ссылки гугла:
    PHP:
    '#<cite>(.*?)<\/cite>#'
    '#<cite>([^<]+)<\/cite>#'
    или так полная ссылка
    #<a href="([^"]+)" class=l>#
    Ну и если только одну ссылку надо то можно preg_match юзать в место preg_match_all
     
    bolyk нравится это.
  3. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
    Гугл желательно парсить курлом, ибо без юзер-агента будет отдавать страницу с капчей. На денвере работает и file_get_contents, а на хостинге вредничает.
     
  4. ocheretko

    ocheretko Постоялец

    Регистр.:
    28 фев 2009
    Сообщения:
    112
    Симпатии:
    50
    Я всегда курлом пользуюсь. А еще у меня есть мечта, но не хватает времени разобраться полностью с сокетами - свобода плавания. Что захотел - то и отправил, в нужном виде, на любой порт и тд, вообщем гибкость
     
  5. karapet

    karapet

    Регистр.:
    9 сен 2008
    Сообщения:
    168
    Симпатии:
    104
    как-то так...
    PHP:
    $linkfirst file("link.txt"); 
    $keys file("keywords.txt"); 

    foreach(
    $keys as $key) {
        
    $link trim($linkfirst[0]);
        
    $key trim($key);
        if(
    $key == '') break;
        
    $content GetFirstLink($key,$link);
        
    flush();
        echo 
    $key.'|'.$content.'<br />';
        
    file_put_contents("rez.txt"trim($key)."|".$content."\r\n"FILE_APPEND);
        
    sleep(1);
    }

    function 
    GetFirstLink($q1,$q2) {
        
    $url="http://www.google.com/search?q=".urlencode($q1." site:".$q2)."&ie=utf-8";
        
    $content=GetPage($url); 
        
    preg_match_all("#<a href=\"([^\"]+)\" class=l>#"$content$result_preg); 
        return 
    $result_preg[1][0];


    function 
    GetPage($url){
        
    $url=str_replace("http://"""$url); 
        
    $host=substr($url,0,strpos($url,"/")); 
        
    $path=substr($url,strpos($url,"/")); 
        
    $skt = @fsockopen($host80); 
        if (!
    $skt) return false
        
    $requestHeader "GET ".$path."  HTTP/1.1\r\n"
        
    $requestHeader.= "Host: ".$host."\r\n"
        
    $requestHeader.= "Connection: close\r\n\r\n"
        
    fwrite($skt$requestHeader); 
        
    $responseHeader ""
        
    $responseContent ""
        do { 
            
    $responseHeader.= fread($skt1); 
        } 
        while (!
    preg_match("/\\r\\n\\r\\n$/"$responseHeader)); 
        if (!
    strstr($responseHeader"Transfer-Encoding: chunked")) { 
            while (!
    feof($skt)) { 
                
    $responseContent.= fgets($skt128); 
            } 
        } else { 
            while (
    $chunk_length hexdec(fgets($skt))) { 
                
    $responseContentChunk ""
                
    $read_length 0
                while (
    $read_length $chunk_length) { 
                    
    $responseContentChunk .= fread($skt$chunk_length $read_length); 
                    
    $read_length strlen($responseContentChunk); 
                } 
                
    $responseContent.= $responseContentChunk
                
    fgets($skt); 
            } 
        } 
        return 
    chop($responseContent);


    ну а дальше, по такому же принципу, цикл по массиву $linkfirst не сложно сделать. если надо конечно...
     
Статус темы:
Закрыта.