Скрипт Human Emulator сбора SEO информации с сайтов.

Предлагаем вашему вниманию скрипт, который собирает данные с заданного сайта,
а именно: внутренние и внешние ссылки, и мета тэги — title, description и keywords.

В результате работы скрипта по заданному пути появляются csv файлы: inner_links.csv с внутренними ссылками,
ext_links.csv с внешними и meta_tags.csv с мета тэгами.

Формат csv файлов с ссылками:

url страницы;ссылка
http://x-scripts.com/;http://www.freecsstemplates.org/
http://x-scripts.com/;https://хуманэмулятор.рф/
http://x-scripts.com/;mailto:order@x-scripts.com

Формат csv файла с meta tags:
url страницы;заголовок страницы;meta tag description; meta tag keywords
http://x-scripts.com/index.php;X-Scripts всё про скрипты XHE и их применение | X-Scripts.com;Описание сайта и разделов представленных на X-Scripts.com;XHE скрипты, написание скриптов XHE, примеры скриптов под хуман, примеры скриптов, скрипты для XWeb Human Emulator бесплатно
http://x-scripts.com/scripts.php;Примеры скриптов для XHE | X-Scripts.com; Примеры скриптов для XHE на X-Scripts.com. Скачай себе скрипт для Xweb Human Emulator;примеры скриптов скачать, скачать скрипты, скрипты xhe скачать, примеры xhe скачать
http://x-scripts.com/scripts/catalogs.php;Скрипт XHE сборщик каталогов | X-Scripts.com;Скрипт XHE сборщик каталогов на .com.

мы использовали функцию $app->show_free_dlg, которая показывает диалог с настройками

мы использовали функцию $app->show_free_dlg, которая показывает диалог с настройками

На этот раз для настроек скрипта мы использовали функцию $app->show_free_dlg, которая показывает диалог с настройками. Для постройки этого диалога функция использует xml файл. Таким образом изменяя xml файл можно создать любой диалог. В результате своей работы функция возвращает строку с настройками. Мы эту строку разбираем и получаем настройки, которые ввёл пользователь в диалог.
В нашем случае пользователь вводит анализируемый сайт, папку куда складывать результаты, задаёт что именно собирать и фильтры какие страницы не обрабатывать.

Пример XML файла нашего диалога настроек:

<freeDlg x="120" y="180" width="300" height="300" value="Настройки для анализа сайта" x_ok="140" y_ok="245" x_cancel="215" y_cancel="245">
	
<LABEL x="5" y="17" width="100" height="20" value="Сайт для анализа:" ></LABEL>
<EDIT x="120" y="10" width="170" height="20" value="http://Введите адрес сайта" ></EDIT>

<LABEL x="5" y="47" width="130" height="20" value="Путь к результатам:" ></LABEL>
<EDIT x="120" y="40" width="170" height="20" value="./res/" ></EDIT>

<LABEL x="5" y="75" width="200" height="20" value="Собирать:" ></LABEL>
<CHECKBOX x="5" y="100" width="200" height="20" value="Внешние ссылки" ></CHECKBOX>
<CHECKBOX x="5" y="125" width="200" height="20" value="Внутренние ссылки" ></CHECKBOX>
<CHECKBOX x="5" y="150" width="200" height="20" value="Мета тэги (title, description, keyword)"></CHECKBOX>
<LABEL x="5" y="185" width="290" height="20" value="Фильтры на поиск (вводить через ,): " ></LABEL>
<EDIT x="5" y="210" width="285" height="20" value="/download/,/forum/,/gallery/,/images/,.jpg,.rar,.png,.js" ></EDIT>
</freeDlg>

Вызов диалога настроек в скрипте:

// покажем диалог настроек скрипта
$str_settings=$app->show_free_dlg(file_get_contents("settings.xml"),"false","<br>");

// добавим главную страницу в массив
$obj_settings=new ScriptSettings();
if(!$obj_settings->set(trim($str_settings)))
{
	debug_mess("<b>не заданы настройки скрипта!</b>");
	debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу<br>");
	$app->quit();
}

Для обработки вводимых пользователем настроек мы добавили специальный класс ScriptSettings:

str_site  = trim($a_sets[0]);
		// путь к папке с результатами
		$this->str_res_folder = trim($a_sets[1]); 
		
		// собирать ли внешние ссылки
		$this->b_ext_links =trim($a_sets[2])==1;
		// собирать ли внутренние ссылки
		$this->b_inn_links = trim($a_sets[3])==1;
		// собирать ли тэги
		$this->b_meta_tags = trim($a_sets[4])==1;
		// разобрать фильтры в массив
      if($a_sets[5]!="")
		     $this->a_filters=explode(",",$a_sets[5]);
      else
           $this->a_filters="";
		
		return true;
	}
  // показать настройки в панели отладки
  function show()
  {
      // сайт 
		echo "анализируем сайт : $this->str_site<br>";
		// путь к папке с результатами
		echo "путь к папке с результатами: $this->str_res_folder<br>"; 
		
      // собирать ли внешние ссылки
      if($this->b_ext_links)
		    echo "собирать внешние ссылки<br>"; 
		
      // собирать ли внутренние ссылки
      if($this->b_inn_links)
	   	echo "собирать внутренние ссылки<br>"; 

		// собирать ли тэги
      if($this->b_meta_tags)
		   echo "собирать тэги<br>"; 

		// разобрать фильтры в массив
		echo " фильтры: <br>"; 
      for($ii=0;$iia_filters);$ii++)
          echo $this->a_filters[$ii]."<br>";
		
      return true;      
  }
}
?>

Скрипт можно легко модифицировать под сбор любой нужной вам информации, например можно собирать email-ы, телефоны, факсы, адреса, цены и т.д.
Можно сделать что б он брал сайты из заданного файла или собирал эти сайты по ключевому
запросу из поисковых результатов гуль или яндекс или любой другой поисковой машины.

Сам скрипт:

show_free_dlg(file_get_contents("settings.xml"),"false","<br>");

// добавим главную страницу в массив
$obj_settings=new ScriptSettings();
if(!$obj_settings->set(trim($str_settings)))
{
	debug_mess("<b>не заданы настройки скрипта!</b>");
	debug_mess(date("\[ d.m.y H:i:s\] ")." скрипт закончил работу<br>");
	$app->quit();
}
// покажем настройки в окне отладки
//$obj_settings->show();

// чистим предыдущие данные
if($obj_settings->b_ext_links) 
	$file_os->delete($obj_settings->str_res_folder."ext_links.csv");
if($obj_settings->b_inn_links) 
	$file_os->delete($obj_settings->str_res_folder."inner_links.csv");
if($obj_settings->b_meta_tags) 
	$file_os->delete($obj_settings->str_res_folder."meta_tags.csv");

// добавим главную в массив
$a_links[]=$obj_settings->str_site;
// чистим данные
// собираем и проверяем 
for($k=0;$knavigate($pg);

 // проверяем страницы которые не нужно обрабатывать 
 // проверить 404 страницу
 $bd=$webpage->get_body();
  if(strpos($bd,"Error 404:"))
       continue;
  // проверить index of
  if(strpos($bd,"Index of "))
       continue;

    // получить meta tags текущей страницы
    if($obj_settings->b_meta_tags) 
        get_meta($pg,$obj_settings);
	
   // получим все href-ы на странице
	$hrefs=$anchor->get_all_hrefs();
	// преобразуем в массив
	$hrefs=explode("<br>",$hrefs);

    // пройтись по всем hrefs и удалим лишнее
	for($ii=0; $iistr_site)===false && $obj_settings->b_ext_links)
        {
					$textfile->add_string_to_file($obj_settings->str_res_folder."ext_links.csv",$pg.";".$pg_href."\n",60) ;
        }
        else if($obj_settings->b_inn_links) // внутренняя ссылка 
        {
				// если ещё не проверяли проверим
				// добавим проверяемую страницу
				if(!is_a_exists($pg_href))
            {
					$a_links[]=$pg_href;   
               $textfile->add_string_to_file($obj_settings->str_res_folder."inner_links.csv",$pg.";".$pg_href."\n",60) ;
            }
        } 
	}
}

// убираем дубликаты из файлов
if($obj_settings->b_ext_links)
	$textfile->dedupe($obj_settings->str_res_folder."ext_links.csv",$obj_settings->str_res_folder."ext_links.csv",60);
if($obj_settings->b_inn_links) 
	$textfile->dedupe($obj_settings->str_res_folder."inner_links.csv",$obj_settings->str_res_folder."inner_links.csv",60);
if($obj_settings->b_meta_tags) 
	$textfile->dedupe($obj_settings->str_res_folder."meta_tags.csv",$obj_settings->str_res_folder."meta_tags.csv",60);

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

// Quit
$app->quit();
?>

Скрипт написан 07.09.2012 в Human Emulator 4.4.19 Advanced.
На момент публикации статьи 10.09.2012 скрипт был рабочий.

Этот скрипт работает в Demo версии программы Human Emulator. Посмотреть все скрипты для Demo и Скачать Demo

скачать скрипт