Cофт для внутреннего анализа страниц сайта и блога
Новая тема Написать ответ
# Пт Сен 02, 2011 10:38 amseogrot Зарег.: 20.11.2010 ; Сообщ.: 86Ответить с цитатой
Добрый день, нужен адекватный софт, чтоб вытянуть все url адреса внутренних страниц сайта, если на сайте есть блог, то все url адреса постов блога, и получить к каждой странице тайтл и киверды (из метатегов).

Нужно что-то вроде E RIDA 2, (впринципе там функционал вполне нормальный, только если на сайте есть блог, для одного сайта просканиаровало, для другого нет, хз...).

Какие есть варианты?

Ну или если ничего подобного нет, подошёл бы вариант, загрузить список внутренних ссылок а программа (скрипт) вытянула для каждой страницы метатеги.
# Пт Сен 02, 2011 12:26 pmtribe Зарег.: 02.09.2007 ; Сообщ.: 504Ответить с цитатой
есть прога 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)) . '"';
}
   
?>

# Пт Сен 02, 2011 1:54 pmseogrot Зарег.: 20.11.2010 ; Сообщ.: 86Ответить с цитатой
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно!
# Пт Сен 02, 2011 2:38 pmseogrot Зарег.: 20.11.2010 ; Сообщ.: 86Ответить с цитатой
seogrot писал(а):
Большое спасибо за прогу и отдельное за скрипт, пока ещё не проверил, но судя по всему именно, то что мне нужно!



xenu - не подошла, там она description определяет, а keywords нет((. Буду пробовать юзать скрипт.
# Сб Сен 03, 2011 10:59 amseogrot Зарег.: 20.11.2010 ; Сообщ.: 86Ответить с цитатой
А Вы бы не могли выслать мне файл 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



Буду признателен если выложите рабочую версию скрипта, очень надо...
# Сб Сен 03, 2011 5:47 pmAkceptor Зарег.: 17.05.2010 ; Сообщ.: 606Ответить с цитатой
Цитата:
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 или же
Код:
set_time_limit(60)


(Вместо 60 нужный лимит)
# Сб Сен 03, 2011 7:23 pmexolon Зарег.: 22.11.2007 ; Сообщ.: 2397Ответить с цитатой
Запускай лучше из консоли.
# Вс Сен 04, 2011 10:31 amseogrot Зарег.: 20.11.2010 ; Сообщ.: 86Ответить с цитатой
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 или же
Код:
set_time_limit(60)


(Вместо 60 нужный лимит)



С этим разобрался, спасибо. А почему метаданные не хочет парсить не знаете?
Новая тема Написать ответ    ГЛАВНАЯ ~ ТЕХНИЧЕСКИЕ ВОПРОСЫ
 
Любое использование материалов, размещенных на ArmadaBoard.com, без разрешения владельцев ArmadaBoard.com запрещено.