|
|
|
Добрый день, нужен адекватный софт, чтоб вытянуть все url адреса внутренних страниц сайта, если на сайте есть блог, то все url адреса постов блога, и получить к каждой странице тайтл и киверды (из метатегов).
Нужно что-то вроде E RIDA 2, (впринципе там функционал вполне нормальный, только если на сайте есть блог, для одного сайта просканиаровало, для другого нет, хз...).
Какие есть варианты?
Ну или если ничего подобного нет, подошёл бы вариант, загрузить список внутренних ссылок а программа (скрипт) вытянула для каждой страницы метатеги. |
|
|
|
|
|
есть прога xenu для получения урлов сайта, ответы сервера, h1 и тп
сам юзаю скрипт, перед запуском создай
1. urls.txt - сюда урлы ложи
2. запусти geturls.php
3. info.csv - результат в таблице по стлбцам - урл, тайтл, описание, слова, h1.
2. geturls.php
Код: |
<?php
define("INPUT_FILE", "urls.txt");
define("OUTPUT_FILE", "info.csv");
if (!file_exists(INPUT_FILE))
{
echo "Input file not found";
return;
}
$fpOut = fopen(OUTPUT_FILE, "w");
foreach(file(INPUT_FILE) as $line)
{
$url = trim($line);
if (empty($url))
continue;
$pageContent = file_get_contents($url);
$pageTitle = $pageHeader = null;
$charset = null;
$res = array();
if (!empty($pageContent))
{
$meta = array();
preg_match_all('/<[\s]*meta[\s]*http-equiv[\s]*="?([^>"]*)"?[\s]*content="?([^>& quot;]*)"?[\s]*[\/]?[\s]*>/si', $pageContent, $res, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($res[1]); $i++)
{
$meta[strtolower(trim($res[1][$i]))] = $res[2][$i];
}
foreach ($http_response_header as $header)
{
if (preg_match('@^Content-Type:.*?charset *= *([^;]+)@i', $header, $res))
{
$charset = strtolower(trim($res[1]));
break;
}
}
if (!empty($meta['content-type']))
{
if (preg_match('@charset *= *([^;]+)@i', $meta['content-type'], $res))
{
$charset = strtolower(trim($res[1]));
}
}
if ($charset != null && $charset != 'windows-1251')
{
$pageContent = iconv($charset, "windows-1251//IGNORE", $pageContent);
}
echo "{$url} {$charset}<br>\r\n";
$meta = array();
preg_match_all('/<[\s]*meta[\s]*name[\s]*="?([^>"]*)"?[\s]*content="?([^>"& #93;*)"?[\s]*[\/]?[\s]*>/si', $pageContent, $res, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($res[1]); $i++)
{
$meta[strtolower(trim($res[1][$i]))] = $res[2][$i];
}
if (preg_match('@<title.*?>(.+?)</title>@im', $pageContent, $res))
{
$pageTitle = $res[1];
}
if (preg_match_all('@<h1.*?>(.+?)</h1>@im', $pageContent, $res))
{
if (count($res[1]) == 1)
$pageHeader = $res[1][0];
else
$pageHeader = implode("; ", $res[1]);
}
$outStr = array();
$outStr[] = safeString($url, false);
$outStr[] = safeString($pageTitle);
$outStr[] = safeString(isset($meta['keywords']) ? $meta['keywords'] : "");
$outStr[] = safeString(isset($meta['description']) ? $meta['description'] : "");
$outStr[] = safeString($pageHeader);
fputs($fpOut, implode(";", $outStr) . "\r\n");
}
}
fclose($fpOut);
function safeString($str, $isTrim = true)
{
if ($isTrim)
preg_replace("@([ \r\n\t]+)@", ' ', $str);
return '"' . str_replace('"', '""', trim($str)) . '"';
}
?>
|
|
|
|
|
|
|
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно! |
|
|
|
|
|
seogrot писал(а): |
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно!
|
xenu - не подошла, там она description определяет, а keywords нет((. Буду пробовать юзать скрипт. |
|
|
|
|
|
А Вы бы не могли выслать мне файл geturls.php а то уже часа полтора бьюсь над скриптом никак не могу его коректно заставить работать.
кое-какие ошибки повылазили при запуске в частности здесь
Код: |
$meta[strtolower(trim($res[1][$i&#
93;))] = $res[2][$i];
|
заменил
Код: |
&#
93; на ] и переносы строки поубирал кое-где
|
сейсас анализирует урлов 50 из файла и определяет тайтл с h1, мететеги не хочет ну и выдаёт ошибку
Код: |
Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21
|
Буду признателен если выложите рабочую версию скрипта, очень надо... |
|
|
|
|
|
Цитата: |
Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21
|
Это не в скрипте проблема, а в настройках пхп. Походу, скрипт не успевает отработать и ему выставляется таймаут.
Попробуй добавить
Код: |
<?php ini_set("max_execution_time", "60"); ?>
|
, поправить ручками в php.ini или же
(Вместо 60 нужный лимит) |
|
|
|
|
|
Запускай лучше из консоли. |
|
|
|
|
|
Akceptor писал(а): |
Цитата: |
Maximum execution time of 30 seconds exceeded in Z:\home\site.com\www\pars\geturls.php on line 21
|
Это не в скрипте проблема, а в настройках пхп. Походу, скрипт не успевает отработать и ему выставляется таймаут.
Попробуй добавить
Код: |
<?php ini_set("max_execution_time", "60"); ?>
|
, поправить ручками в php.ini или же
(Вместо 60 нужный лимит)
|
С этим разобрался, спасибо. А почему метаданные не хочет парсить не знаете? |
|
|
|
|
|
|
|