СКРИПТ: Сборщик форумов по заданным фильтрам

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

СКРИПТ: Сборщик форумов по заданным фильтрам

Сообщение XwebDeveloper » 03 июн 2020, 16:29

Сборщик ссылок на форумы и проверка этих ссылок по заданным фильтрам.

Версия программы: Human Emulator Studio 7.0.50.

Браузер: Chromium.

Логика: Получаем поисковые запросы из файла. Вводим их в поиск яндекса и разбираем выдачу на заданную глубину. Проверяем полученные ссылки сначала что это именно форумы или они имеют ссылки на форумы. Потом если надо переходим на форум и проверяем там ссылки на наличие заданных вариантов текста.

То есть по сути мы перешли на форум и проверили есть ли там разделы или темы с заданным вариантом текста.

Скрипт состоит:
Запускаемый файл collect_forums_ya.php. В файле functions.php прописаны подключаемые команды.
В папку res записываются файлы с результатами сбора и анализа в следующем виде: forums_bad.txt - не форумы, forums_good.txt - форумы, forums_good_post.txt - форумы, содержащие нужные разделы или темы.
В папке data лежит файл с запросами для поиска keywords.txt в формате одна строка один запрос.

Скачать скрипт:
collect_forums.zip
(5.15 КБ) 85 скачиваний

Настройки скрипта:
// //////////////////////// настройки скрипта /////////////////////////
// путь к файлу ключевых слов
$path_to_data = "data/keywords.txt";
// папка с результатами сбора и анализа
$path_to_res = "res/";

// глубина прохода в поисковые результаты
$cnt_pages = 20;

// индекс текущей папки
$inds_path = "data/inds.txt";
// стартовый индекс
$str_index=0;
// не форумы
$path_bad_forums = "res\\forums_bad.txt";
// форумы
$path_good_forums = "res\\forums_good.txt";
// форумы с нужными темами/разделами
$path_good_post_forums = "res\\forums_good_post.txt";

// слова для проверки на форум
$forum_str = "ФОРУМ;Форум;форум";
// название темы или раздела который нужно проверить на форуме
$post_str = "PHP;php;пхп;ПХП;Php";

// фильтры при поиске ссылок из выдачи
// ссылки содержащие данные слова пропускаются
$filters = "yandex;youtube.com;wikibooks;wikipedia;vk.com;wiki.";

Сам скрипт:
// /////////////////////// скрипт ///////////////////////////////////////////
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)); 
}

$browser->close_all_tabs();
// добавить браузер
$browser->set_count(2);
$browser->set_active_browser(0);

// пробежимся по всем ключевым словам
for($ii=$str_index;$ii<count($arr_of_kwds);$ii++)
{
    // ключевое слово
	$kwd = trim($arr_of_kwds[$ii]);
	if ($kwd == "")
	{
		continue;
	}
	// переходим на яндекс
	$browser->navigate("http://www.yandex.ru/");
	sleep(2);

	// задаём слово в поиск
	$input->set_focus_by_name("text");
	// вводим текст с нажатием enter
	$input->send_keyboard_input_by_name("text",$kwd."\n", "20:40");
        // пауза
	sleep(3);

	// обнулим перед следующим проходом
	$crnt_page = 1;
	// работаем с ключевым словом на заданную длину
	while (true)
        {
                debug_mess(date("\[ d.m.y H:i:s\] ")." получаем ссылки из поиска<br>");

		// получим все ссылки на сайты заключённые в префиксах
		$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 == "" or !check_filters($site,$filters))
			  continue;
			
                        // вывод в панель отладки
			debug_mess("ссылка на сайт : ".$site);
	
                         $browser->set_active_browser(1);
			// разобрать ключи в файл 
			check_forum($site,$kwd);
			sleep(2);

                        debug_mess(date("\[ d.m.y H:i:s\] ")." закрываем все браузеры<br>");
                        $browser->close_all_tabs();
                        debug_mess(date("\[ d.m.y H:i:s\] ")." открываем две закладки<br>");
			// добавить браузер
			$browser->set_count(2);
                        debug_mess(date("\[ d.m.y H:i:s\] ")." делаем активной нулевую<br>");
			$browser->set_active_browser(0);
		}
		
                debug_mess(date("\[ d.m.y H:i:s\] ")." переходим на следующую страницу выдачи<br>");
		 // организация перехода на следующую страницу
		if(!next_page($crnt_page))
		{
			break;
		}

               debug_mess(date("\[ d.m.y H:i:s\] ")." удаляем дубликаты из файлов<br>");

		// убираем строки-дубликаты из файлов после прохождения всех страниц
		$textfile->dedupe($path_bad_forums, $path_bad_forums, 60);
		$textfile->dedupe($path_good_forums, $path_good_forums, 60);
		$textfile->dedupe($path_good_post_forums, $path_good_post_forums, 60);
	}

    // вывод в панель отладки
    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>");

// убираем строки-дубликаты из файлов после прохождения всех страниц
$textfile->dedupe($path_bad_forums, $path_bad_forums, 60);
$textfile->dedupe($path_good_forums, $path_good_forums, 60);
$textfile->dedupe($path_good_post_forums, $path_good_post_forums, 60);

// удалить файл с индексом
$file_os->delete($inds_path);
Запрос на создание скриптов viewforum.php?f=61

Ответить