Парсер wordstat.yandex.ru

Статус
В этой теме нельзя размещать новые ответы.

D@nil

Постоялец
Регистрация
1 Окт 2006
Сообщения
340
Реакции
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, $out, PREG_SET_ORDER); 

    foreach ($out as $key=>$value) preg_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 />'; 
} 

?>
 

terkin

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

ewg777

Мой дом здесь!
Регистрация
6 Авг 2007
Сообщения
764
Реакции
334
АП!

Модифицированная версия. Но не хватает парсинга всех страниц! Добавлена форма для постинга через 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, $out, PREG_SET_ORDER); 
foreach ($out as $key=>$value) preg_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>
<?
}
?>
 

D@nil

Постоялец
Регистрация
1 Окт 2006
Сообщения
340
Реакции
122
Думаю так яша быстро поймет что его парсит робот и выдаст капчу, нужно делать или задержку или использовать CURL и работать через прокси.

спасает задержка в 10 сек между запросами.
 
L

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, $out, PREG_SET_ORDER); 

    foreach ($out as $key=>$value) preg_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));
?>
 

ewg777

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

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, $out, PREG_SET_ORDER); 

    foreach ($out as $key=>$value) preg_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));

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

pixelranger

Постоялец
Регистрация
23 Июн 2006
Сообщения
381
Реакции
114
Не работает, возвращает пустые строки, причем, попробывал парсить по ссылке
Для просмотра ссылки Войди или Зарегистрируйся
показывает ввод капчи. Пресекли?
 

ewg777

Мой дом здесь!
Регистрация
6 Авг 2007
Сообщения
764
Реакции
334

goodvin

Человек-Волшебник
Регистрация
27 Июн 2006
Сообщения
667
Реакции
694
Обновил немного, теперь пашет. понадобился парсер.

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 ($ch, CURLOPT_URL, $url);
 curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
 curl_setopt ($ch, CURLOPT_HEADER, 1);
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008052906 Firefox/3.0');
 curl_setopt ($ch, CURLOPT_REFERER, "http://wordstat.yandex.ru/");
 $data = curl_exec ($ch);
 $http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE);
 curl_close ($ch);
 return $data;
}
?>
файлик должен быть в ютф-8
 

Вложения

  • word.rar
    981 байт · Просмотры: 62
Статус
В этой теме нельзя размещать новые ответы.
Сверху