Парсер wordstat.yandex.ru

Тема в разделе ".:: Готовые решения", создана пользователем D@nil, 5 апр 2008.

Статус темы:
Закрыта.
  1. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    Функция парсинга к wordstat.yandex.ru

    взято с SE.

    PHP:
    <?php

    function parse_wordstat($keyword) { 

        
    $pattern  '/<table border="0" width="100%" cellspacing="0" cellpadding="5">(.*?)<\/table>/is'
        
    $pattern2 '/<tr class="tlist".*?><td><a href=".*?">(.*?)<\/a><\/td>[\n]*<td align=["]*right["]*>([\d]+)<\/td><\/tr>/is'

        
    $url 'http://wordstat.yandex.ru/advq?rpt=ppc&text='.urlencode($keyword); 
        
    $data file_get_contents($url); 

        
    preg_match_all($pattern$data$outPREG_SET_ORDER); 

        foreach (
    $out as $key=>$valuepreg_match_all($pattern2$value[1], $out2[$key], PREG_SET_ORDER); 

        return 
    $out2




    $ws parse_wordstat('холодильник'); 

    foreach (
    $ws as $w) { 
        echo 
    '<hr />'
        foreach (
    $w as $k) echo $k[1].' | '.$k[2].'<br />'


    ?>
     
  2. terkin

    terkin

    Регистр.:
    9 дек 2006
    Сообщения:
    513
    Симпатии:
    162
    Думаю так яша быстро поймет что его парсит робот и выдаст капчу, нужно делать или задержку или использовать CURL и работать через прокси.
     
  3. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    АП!

    Модифицированная версия. Но не хватает парсинга всех страниц! Добавлена форма для постинга через web интерфейса
    PHP:
    <?
    if (
    $_POST["parser_on"])
    {
    function 
    parse_wordstat($keyword) {
    $pattern '/<table border="0" width="100%" cellspacing="0" cellpadding="5">(.*?)<\/table>/is'
    $pattern2 '/<tr class="tlist".*?><td><a href=".*?">(.*?)<\/a><\/td>[\n]*<td align=["]*right["]*>([\d]+)<\/td><\/tr>/is'
    $url 'http://wordstat.yandex.ru/advq?rpt=ppc&text='.urlencode($keyword); 
    $data file_get_contents($url); 
    preg_match_all($pattern$data$outPREG_SET_ORDER); 
    foreach (
    $out as $key=>$valuepreg_match_all($pattern2$value[1], $out2[$key], PREG_SET_ORDER); 
    return 
    $out2;
    }
    $qweqewqw=$_POST["You_are_KeyworD"];
    $ws parse_wordstat($qweqewqw);
    foreach (
    $ws as $w) {
    echo 
    '<hr>';
    foreach (
    $w as $k) echo $k[1].' | '.$k[2].'<br>';
    }
    } else {
    ?>
    <form method="POST" action="index.php">
    <input class=edit type=text name='You_are_KeyworD' value="" size=40>
    <input type="submit" value="&laquo; Вперед &raquo;" name="parser_on" size="20">
    </form>
    <?
    }
    ?>
     
  4. D@nil

    D@nil

    Регистр.:
    1 окт 2006
    Сообщения:
    338
    Симпатии:
    122
    спасает задержка в 10 сек между запросами.
     
  5. Lonely Wolf

    Lonely Wolf Прохожие

    Доработал под свои требования, а именно:
    + установка неограниченного кол-во кеев;
    + фильтрация на одинаковые кеи в результате со всех;
    + запись собранных и отфильтрованных кеев в файл;

    PHP:
    <?php

    function parse_wordstat($keyword) { 

        
    $pattern  '/<table border="0" width="100%" cellspacing="0" cellpadding="5">(.*?)<\/table>/is'
        
    $pattern2 '/<tr class="tlist".*?><td><a href=".*?">(.*?)<\/a><\/td>[\n]*<td align=["]*right["]*>([\d]+)<\/td><\/tr>/is'

        
    $url 'http://wordstat.yandex.ru/advq?rpt=ppc&text='.urlencode($keyword); 
        
    $data file_get_contents($url); 

        
    preg_match_all($pattern$data$outPREG_SET_ORDER); 

        foreach (
    $out as $key=>$valuepreg_match_all($pattern2$value[1], $out2[$key], PREG_SET_ORDER); 

        return 
    $out2;

    }

    $keywords = array();
    $keywords[] = 'sms';
    $keywords[] = 'sms-партнёрка';
    $keywords[] = 'партнёрка';
    $keywords[] = 'sms-оплата';

    $aws = array();
    foreach (
    $keywords as $keyword) {
      
    $aws[] = parse_wordstat($keyword);
    }

    $search = array();
    $replace = array();
    $words = array();

    $search[] = '*';
    $replace[] = '';
    foreach (
    $aws as $ws) {
      foreach (
    $ws as $w) {
        foreach (
    $w as $k$words[] = str_replace($search,$replace,$k[1]);
      }
    }
    $words array_unique($words);
    @
    file_put_contents('keywords.txt',implode(', ',$words));
    ?>
     
  6. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    А этот парсер собирает лишь страницы же? А какой от этого смысл? Нужно парсить до тех, пока не закончатся ключевые!
     
  7. Starik777

    Starik777 Постоялец

    Регистр.:
    19 апр 2008
    Сообщения:
    66
    Симпатии:
    35
    PHP:
    <?php

    set_time_limit
    (0);

    function 
    parse_wordstat($keyword) { 

        
    $pattern  '/<table border="0" width="100%" cellspacing="0" cellpadding="5">(.*?)<\/table>/is'
        
    $pattern2 '/<tr class="tlist".*?><td><a href=".*?">(.*?)<\/a><\/td>[\n]*<td align=["]*right["]*>([\d]+)<\/td><\/tr>/is';

        
    $url 'http://wordstat.yandex.ru/advq?rpt=ppc&text='.urlencode($keyword); 
        
    $data file_get_contents($url); 

        
    preg_match_all($pattern$data$outPREG_SET_ORDER); 

        foreach (
    $out as $key=>$valuepreg_match_all($pattern2$value[1], $out2[$key], PREG_SET_ORDER); 

        
    $out3 = array();
        foreach (
    $out2[0] as $key=>$value){$out3[0][] = array($out2[0][$key][1],$out2[0][$key][2]);}
        foreach (
    $out2[1] as $key=>$value){$out3[1][] = array($out2[1][$key][1],$out2[1][$key][2]);}
        
        return 
    $out3;
    }

    $keywords = array();
    $keywords[] = 'кочка';
    $keywords[] = 'строчка';

    $aws = array();
    foreach (
    $keywords as $keyword) {
        
    $aws[] = parse_wordstat($keyword);
        
    $rand rand(10,15);
        for (
    $i=0;$i<$rand;$i++){print "$i xpp... "flush(); sleep(1);}
    }
    print_r($aws);
    $itog = array();

    foreach (
    $aws as $key=>$key_val) {
        foreach (
    $key_val[0] as $w=>$w_val){
            
    $itog[] = array($keywords[$key],$w_val[0],$w_val[1]);
        }
        foreach (
    $key_val[1] as $w=>$w_val){
            
    $itog[] = array($keywords[$key]." +",$w_val[0],$w_val[1]);
        }
    }
    print_r($itog);
    foreach(
    $itog as $i=>$val){
        
    $itog[$i] = implode("\t",$itog[$i]);
    }
    @
    file_put_contents('keywords.txt',implode("\n",$itog));

    ?> 
    вот вариантик предыдущего. Складывает все кеи в виде:
    ключевик таб вариант таб кол-во
    ключевик + - это те что справа дополнительные ключевики.
    Удобно открывать в экселе
     
  8. pixelranger

    pixelranger

    Регистр.:
    24 июн 2006
    Сообщения:
    386
    Симпатии:
    117
    Не работает, возвращает пустые строки, причем, попробывал парсить по ссылке
    Перейти по ссылке
    показывает ввод капчи. Пресекли?
     
  9. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    HTML-код страниц поменялся.
     
  10. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    Обновил немного, теперь пашет. понадобился парсер.

    PHP:
     
    <?php 
    set_time_limit
    (0); 
    $keywords = array(); 
    $keywords[] = 'соски'
    $keywords[] = 'сосать'
    $keywords[] = 'сосун'
    $keywords[] = 'суслик'
    $keywords[] = 'сусанин'
    $aws = array(); 
    foreach (
    $keywords as $keyword) { 
        
    $aws[] = parse_wordstat($keyword); 
        
    $rand rand(10,15); 
        for (
    $i=0;$i<$rand;$i++){print "$i x. "flush(); sleep(1);}

    //print_r($aws); 
    $itog = array(); 
    foreach (
    $aws as $key=>$key_val) { 
    //print_r($key_val);
        
    foreach ($key_val[0] as $w=>$w_val){ 
            
    $itog[] = array($keywords[$key],$w_val[1],$w_val[2]); 
        } 
        foreach (
    $key_val[1] as $w=>$w_val){ 
            
    $itog[] = array($keywords[$key]." +",$w_val[1],$w_val[2]); 
        } 

    //print_r($itog); 
    foreach($itog as $i=>$val){ 
        
    $itog[$i] = implode("\t",$itog[$i]); 

    @
    file_put_contents('keywords.txt',implode("\n",$itog));
    function 
    parse_wordstat($keyword) {  
    // $keyword = iconv("WINDOWS-1251", "UTF-8", $keyword);
        
    $pattern2 '/<tr class="tlist".*?><td><a href=".*?">(.*?)<\/a><\/td><td align="right">([\d]+)<\/td><\/tr>/is'
     
    $url 'http://wordstat.yandex.ru/?cmd=words&geo=&page=1&text='.urlencode($keyword).'&text_geo='.urlencode($keyword);
        
    $data get($url);
     
    $data preg_replace("'([\r\n]+)[\s]+'"""$data);
     
    preg_match('/Что искали со(.*?)<\/tbody>/s'$data$data1);
     
    preg_match('/Что еще искали люди, искавшие (.*?)<\/tbody>/s'$data$data2);
     
        
    preg_match_all($pattern2$data1[1], $out[0], PREG_SET_ORDER); 
        
    preg_match_all($pattern2$data2[1], $out[1], PREG_SET_ORDER); 
    // print_r($data2); 
        
    return $out

    function 
    get($url) {
     
    $ch curl_init ();
     
    curl_setopt ($chCURLOPT_URL$url);
     
    curl_setopt ($chCURLOPT_TIMEOUT60);
     
    curl_setopt ($chCURLOPT_HEADER1);
     
    curl_setopt ($chCURLOPT_RETURNTRANSFER1);
     
    curl_setopt ($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0');
     
    curl_setopt ($chCURLOPT_REFERER"http://wordstat.yandex.ru/");
     
    $data curl_exec ($ch);
     
    $http_code curl_getinfo ($chCURLINFO_HTTP_CODE);
     
    curl_close ($ch);
     return 
    $data;
    }
    ?> 
     
    файлик должен быть в ютф-8
     

    Вложения:

    • word.rar
      Размер файла:
      981 байт
      Просмотров:
      58
    dizpers, Думаю, sherif и ещё 1-му нравится это.
Статус темы:
Закрыта.