СКРИПТ: Парсер ключевых слов с сайтов из выдачи Яндекса

Сбор и анализ всего что можно собрать из сети.
Ответить
Аватара пользователя
XwebDeveloper
Сообщения: 37
Зарегистрирован: 13 ноя 2017, 12:53

СКРИПТ: Парсер ключевых слов с сайтов из выдачи Яндекса

Сообщение XwebDeveloper » 18 май 2020, 22:50

Версия программы: 7.0.49

Сборщик ключевых слов с сайтов из выдачи Яндекса.

Браузер: Chromium.
Для быстродействия лучше использовать Chromium(Offscrean).

Логика: Есть файл с ключевыми запросами. Вбиваем запросы из файла в поисковик Яндекс, получаем из выдачи все ссылки на сайты и делам проход по всем сайтам, загружаем страницы, которые попали в выдачу по заданным ключевым запросам и не открывая их в браузере, если там есть разбираем мета тэги meta name="keywords".

Скрипт состоит:
Запускаем parser_yandex.php.
В папке data лежит файл keys.txt, в котором записаны ключевые запросы для поиска сайтов.
В процессе работы скрипта в папке res создаются TXT файлы с результатами сбора для каждого заброса отдельно.

Скачать скрипт:
parser_kw_ya.zip
(13.44 КБ) 1 скачивание
Скрипт:
<?php
$xhe_host ="127.0.0.1:7012";

// The following code is required to properly run XWeb Human Emulator
require("../../Templates/xweb_human_emulator.php");
// //////////////////////// настройки скрипта /////////////////////////
// путь к файлу ключевых слов
$path_to_data = "data/keywords.txt";
$path_to_res = "res/";

// глубина прохода в поисковые результаты
$cnt_pages = 10;
// текущая страница
$crnt_page = 1; 
// массив ключевых слов
$arr_of_kwds = array();
// скрипт работает в режим отладки
$dbg = true;

// индекс текущей папки
$inds_path = "data/inds.txt";
// стартовый индекс
$str_index=0;

$bUTF8Ver=true;
// //////////////////////// дополнительные модули ///////////////
// функции 
require_once("tools/functions.php");
require_once("tools/a.charset.php");

// /////////////////////// скрипт ///////////////////////////////////////////
debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт запустили");

// получаем массив с ключевыми словами
$arr_of_kwds = file($path_to_data);

// проверям есть ли уже обработанные запросы из файла
if ($file_os->is_exist($inds_path))
{
   $str_index=trim($textfile->get_line_from_file($inds_path,false,0)); 
}

// пробежимся по всем ключевым словам
for($ii=$str_index;$ii<count($arr_of_kwds);$ii++)
{
	$kwd = trim($arr_of_kwds[$ii]);
	if ($kwd == "")
	{
		continue;
	}
   // go to yandex	
   $browser->navigate("http://www.yandex.ru/");
	sleep(2);
	
	// задаём слово в поиск
	$input->set_focus_by_name("text");
	//$input->set_value_by_name_by_form_name("text", $kwd."\n", "form");
    $input->send_keyboard_input_by_name("text",$kwd."\n", "20:40");

	sleep(3);

	// обнулим перед следующим проходом
	$crnt_page = 1;
	// работаем с ключевым словом на заданную длину
	while (true)
   {
		// получим все ссылки на сайты заключённые в префиксах
		$sites = $webpage->get_body_inter_prefix_all('link link_theme_normal organic__url', '</a>');
		$sites = explode("<br>", $sites);
			
                // удалить дубликаты
		$sites = array_unique($sites);
		// пройдёмся по всем полученным ссылкам
		for($i = 0; $i < count($sites); $i++)
		{        
			$pr1 = 'href="';
			$pr2 = '"';
			$site = get_string($sites[$i], $pr1, $pr2);
			if ($site == "")
			  continue;
			
                        // вывод в панель отладки
			debug_mess("ссылка на сайт : ".$site);
	
			// разобрать ключи в файл 
			parse_yandex($site,$kwd);

			sleep(2);
		}
		
		 // организация перехода на следующую страницу
		if(!next_page($crnt_page))
		{
			// убираем строки-дубликаты из файла после прохождения всех страниц
			$textfile->dedupe($path_to_res.$kwd.".txt", $path_to_res.$kwd.".txt", 60);	
			sleep(3);
			break;
		}
	}

    // вывод в панель отладки
	debug_mess("<b>".date("\[ d.m.y H:i:s\] ")."отработали запрос ".$kwd."</b>");

    // запоминаем на всяк случай индекс для следующего запуска
    $str_index++;
    $textfile->write_file($inds_path,$str_index); 

}
debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу<br>");

// удалить файл с индексом
$file_os->delete($inds_path);
// Quit
$app->quit();
?>

Код парсинга выдачи Яндекса:

// получим все ссылки на сайты заключённые в префиксах
$sites = $webpage->get_body_inter_prefix_all('link link_theme_normal organic__url', '</a>');
$sites = explode("<br>", $sites);
Если скрипт не работает, то скорее всего изменилась выдача поисковика. Для того что бы это починить надо в функции get_body_inter_prefix_all поменять префиксы для разбора на новые. Определить префиксы для разбора довольно просто.

1. Выбираем в программе кусок выдачи и нажимаем на правую кнопку мыши в контекстном меню выбираем пункт Показать выбранный HTML
parse_yandex1.jpg
parse_yandex1.jpg (197.3 КБ) 16 просмотров
2. Открывается код выбранной части страницы в блокноте в текстовом виде. Находим в нём ссылку, которую надо получить и берём префиксы для разбора перед этой ссылкой и после.
parse_yandex2.jpg
parse_yandex2.jpg (168.98 КБ) 16 просмотров
Таким образом мы получаем кусок выдачи с интересующей нас ссылкой.


Для загрузки страниц сайта, используется функция объекта webpage load_web_page
// получаем контент по данному url
$content = $webpage->load_web_page($site);

Ответить