Парсер 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 />'; 
} 

?>
 
Думаю так яша быстро поймет что его парсит робот и выдаст капчу, нужно делать или задержку или использовать CURL и работать через прокси.
 
АП!

Модифицированная версия. Но не хватает парсинга всех страниц! Добавлена форма для постинга через 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>
<?
}
?>
 
Думаю так яша быстро поймет что его парсит робот и выдаст капчу, нужно делать или задержку или использовать CURL и работать через прокси.

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

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));
?>
 
А этот парсер собирает лишь страницы же? А какой от этого смысл? Нужно парсить до тех, пока не закончатся ключевые!
 
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));

?>
вот вариантик предыдущего. Складывает все кеи в виде:
ключевик таб вариант таб кол-во
ключевик + - это те что справа дополнительные ключевики.
Удобно открывать в экселе
 
Не работает, возвращает пустые строки, причем, попробывал парсить по ссылке
Для просмотра ссылки Войди или Зарегистрируйся
показывает ввод капчи. Пресекли?
 
Обновил немного, теперь пашет. понадобился парсер.

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
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху