alex-bot
Nulled-Man
- Регистрация
- 4 Май 2007
- Сообщения
- 496
- Реакции
- 161
- Автор темы
- #1
Люди добрые помогите кто еще не отмечает подправить парсер вордстата:
Подскажите как сделать цикл из кеев, т.е. вводим кеи в форму берем 1-й кей проверяем, выводим, затем второй, и тд.
И второе как подправить тут регулярку, чтоб записывался только первый кей, т.е. нужен сбор статистики... В принципе тут есть регулярка, тогда как ее ограничить лишь первым совпадением.
PS Сейчас скрипт тоже не пашет
Parse error: parse error, unexpected $end in y:\home\test1.ru\www\pars3\index.php on line 116
Может }{ где то нет...
Подскажите как сделать цикл из кеев, т.е. вводим кеи в форму берем 1-й кей проверяем, выводим, затем второй, и тд.
И второе как подправить тут регулярку, чтоб записывался только первый кей, т.е. нужен сбор статистики... В принципе тут есть регулярка, тогда как ее ограничить лишь первым совпадением.
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Парсер статистики запросов Яндекса</title>
<style>
body {
font-family: sans-serif;
font-size: 12px;
}
table.keywords {
border-collapse: collapse;
}
table.keywords th, table.keywords td {
border: 1px solid #EE9900;
padding: 6px;
background-color: #FFCC33;
}
table.keywords th {
text-align: left;
}
tr.odd td, tr.odd th {
background-color: #FFFFCC;
}
tr.even td, tr.even th {
background-color: #FFFFEE;
}
tr.current td, tr.current th {
background-color: #FFDD66;
}
</style>
</head>
<body>
<!--// Выводим то, что сгенерировал нам скрипт: таблицу, либо сообщение об отсутствии результатов. //-->
<form action="index.php" method="post">
<p>
Ключевые запросы:<br />
<textarea style="width:400px;height:100px;font-size:10pt"><?php print @$_POST['queries']; ?></textarea><br />
<input type="submit" />
</p>
</form>
<?
function yandexwordstat($query, &$keywords = null, $maxpage = 1) { // Аргументы функции: запрос, ссылка на создаваемый функцией массив, максимальное количество страниц для обработки.
srand(time()); // Нам потребуются случайные числа, чтобы вносить нерегулярную задержку перед повторными запросами к Вордстату, иначе он после n-ого запроса затребует вводить капчу.
$page = 1; // Предполагаем, что по нашему запросу в выдаче Вордстата будет лишь единственная страница.
$query = urlencode($query); // Кодируем в запросе символы так, как положено, чтобы не осталось там русских букв.
do {
$repeat = false; // Предполагаем, что парсить выдачу мы будем бесконечно. Позже мы остановимся, когда не останется страниц для дальнейшего анализа.
$url = "http://wordstat.yandex.ru/?cmd=words&page=1&text=$query&geo=&text_geo="; // Ссылка с запросом и порядковым номером страницы выдачи по этому запросу. Выбран регион «Москва и область». Если регион не нужен, то убирайте из запроса ключ text_geo и его значение.
$ch = curl_init(); // Создаём объект-страницу. Нам помогает великая библиотека cURL -- лучший друг любого бота, который хочет претвориться браузером живого пользорвателя.
curl_setopt($ch, CURLOPT_URL, $url); // Указываем откуда затащить содержимое в наш объект.
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)"); // Прикинемся каким-нибудь популярным браузером.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch); // Получаем объект-страницу в виде длинной символьной строки.
curl_close($ch); // Убиваем объект-страницу, он нам больше не нужен, исходный код страницы уже в строковой переменной.
// Регулярное выражение, выбирающее со страницы ключевики. Этой регуляркой выбираются вообще все ключевики со страницы, в том числе и запросы из колонки «Что еще искали люди, искавшие...». Благо в последнем случае показываются только самые популярные -- добавить в наш набор их будет полезно.
$pattern = '/<tr class="tlist" bgcolor="#......">[[:space:]]*<td>[[:space:]]*<a href=".*?">(.*?)<\/a>[[:space:]]*<\/td>[[:space:]]*<td align="right">(.*?)<\/td>[[:space:]]*<\/tr>/s';
$ismatches = preg_match_all($pattern, $html, $out); // Вытягиваем в соответствии с регулярным выражением $pattern все его вхождения в великую строку $html, результаты отправляем в многомерный ассоциированный массив $out. А возвращает функция истину, если хоть одно вхождение нашлось.
if ($ismatches) { // Если нашлись слова, то вытаскиваем их из сложноустроенного массива и складываем в просто устроенный ассоциированный, вида $keywords['ключевик'] = кол-во запросов.
foreach ($out[1] as $key => $value) {
$value = str_replace('+','', $value); // Заодно выбросим плюсики из ключевиков.
$keywords[$value] = $out[2][$key]; // Кстати, индекс ассоциированного массива в виде ключевика гарантирует нам, что дублей ключевиков в массиве не будет.
}
}
$pattern2 = "/page=";
$pattern2 .= $page+1 . "&/s"; // Новое регулярное выражение, с помощью которого мы будем выявлять, есть ли по заданному ключевику следующая страница выдачи.
if(preg_match($pattern2,$html)) {
$repeat = true; // Страница есть, будем повторять цикл парсинга, но уже для следующей страницы.
sleep(rand()%3*3+2); // Но перед повторением немного покурим, чтобы Вордстат не принял нас за интенсивных ботов. В текущем варианте парсер будет тратить от 2 до 8 секунд на страницу выдачи. Уменьшайте аккуратно, дабы не схлопотать капчу.
$page++; // Номер страницы выдачи меняем на следующий.
} else {
$repeat = false; // Нету следующей страницы, пора цикл завершать.
}
} while ($repeat && ($page < $maxpage)); // Повторим цикл, если имеется следующая страница выдачи. А также если нам разрешено обрабатывать так много страниц (см. третий апарметр функции).
arsort(&$keywords); // Отсортируем массив так, чтобы сначала шли ключевики с наибольшей частотой.
return $page; // А возвращает-то функция количество обработанных страниц выдачи.
}
$keywords = array(); // Создаём пустой массив. После вызова функции в него отправятся ключевики с их частотой.
foreach ($queries as $query) {
$query=str_replace("", "", $query);
$query=str_replace("\r", "", $query);
$query=str_replace("\n", "", $query);
$pages = yandexwordstat($_POST['query'], $keywords); // Вызываем функцию, передавая ей ключевик, прочитанный из текстового поля формы.
if (count($keywords) > 0) { // Будем что-то стряпать для дальнейшего вывода только если в массив попали какие-то ключевики.
// Соберём из кусочков таблицу о двух столбцах: Запросы и количество показов в месяц по данным Яндекса.
$str = '<table class="keywords"><tbody>'; // Начало таблицы.
$str .= '<tr class="header"><th>Поисковый запрос</th><th>Месячное количество запросов в Яндексе</th></tr>'; // Шапка таблицы.
$i = 1; // Порядковый номер генерируемой строки таблицы.
foreach ($keywords as $key => $value) { // Разбираем на запчасти массив ключевиков и количества запросов.
// Открывать строки таблицы мы будем тегами с разными атрибутами в зависимости от чётности строки.
if ($i%2 == 0) { // Строчки с чётным номером я буду выводить с одним стилем. Класс even.
// JavaScript поможет нам подсветить иным цветом ту строку таблицы, над которой завис курсор мыши. Для строк под указателем добавим css-класс current. Удобно.
$str .= '<tr onmouseover="this.className=\'current even\';" onmouseout="this.className=\'even\';" class="even"><th>';
} else { // А с нечётным -- с другим стилем. Класс odd. Такую «зебру» зрительно воспринимать удобнее.
$str .= '<tr onmouseover="this.className=\'current odd\';" onmouseout="this.className=\'odd\';" class="odd"><th>';
}
$i++; // Следующая строка со следующим номером. Нас, впрочем, только его чётность будет волновать.
$str .= $key; // В первом столбце показываем ключевик.
$str .= '</th><td>';
$str .= $value; // Во втором -- количество запросов.
$str .= '</td>';
$str .= '</tr>'; // Закрываем строку таблицы.
}
$str .= '</tbody></table>'; // Конец таблицы.
//$str .= '<p>Обработано страниц: '.$pages.'</p>'; // Покажем, сколько страниц пришлось переварить нашему парсеру.
} else {
$str .= '<p>По указанному запросу никто и ничего в Яндексе не искал.</p>';
}
print $str;
?>
</body>
</html>
Parse error: parse error, unexpected $end in y:\home\test1.ru\www\pars3\index.php on line 116
Может }{ где то нет...