Сборщик ключевых слов с сайтов из выдачи Google.
Браузер: Chromium.
Для быстродействия лучше использовать Chromium(Offscrean).
Логика: Есть файл с ключевыми запросами. Вбиваем запросы из файла в поисковик Google, получаем из выдачи все ссылки на сайты и делам проход по всем сайтам, загружаем страницы, которые попали в выдачу по заданным ключевым запросам и не открывая их в браузере, если там есть разбираем мета тэги meta name="keywords".
Скрипт состоит:
Запускаем parser_google.php.
В папке data лежит файл keys.txt, в котором записаны ключевые запросы для поиска сайтов.
В процессе работы скрипта в папке res создаются TXT файлы с результатами сбора для каждого заброса отдельно.
Скачать скрипт: Скрипт:
<?php $xhe_host ="127.0.0.1:7011"; // 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(); // индекс текущей папки $inds_path = "data/inds.txt"; // стартовый индекс $str_index=0; // скрипт работает в режим отладки $dbg = true; $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; } // перейти на гугль $browser->navigate("google.com"); sleep(2); // задаём слово в поиск $input->send_keyboard_input_by_name("q",$kwd."\n", "20:40"); sleep(3); // обнулим перед следующим проходом $crnt_page = 1; // работаем с ключевым словом на заданную длинну while (true) { // получим все ссылки на сайты заключённые в префиксах $sites = $webpage->get_body_inter_prefix_all('<div class="r">', '</div>'); $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); // записать найденные ключи в файл get_meta_kw($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(); ?>
Код парсинга выдачи Google:
// получим все ссылки на сайты заключённые в префиксах $sites = $webpage->get_body_inter_prefix_all('<div class="r">', '</div>'); $sites = explode("<br>", $sites);
Если скрипт не работает, то скорее всего изменилась выдача поисковика. Для того что бы это починить надо в функции get_body_inter_prefix_all поменять префиксы для разбора на новые. Определить префиксы для разбора довольно просто.
1. Выбираем в программе кусок выдачи и нажимаем на правую кнопку мыши в контекстном меню выбираем пункт Показать выбранный HTML
2. Открывается код выбранной части страницы в блокноте в текстовом виде. Находим в нём ссылку, которую надо получить и берём префиксы для разбора перед этой ссылкой и после.
Таким образом мы получаем кусок выдачи с интересующей нас ссылкой.
Для загрузки страниц сайта, используется функция объекта webpage load_web_page
// получаем контент по данному url $content = $webpage->load_web_page($site);