Извлечь из sitemap.xml все ссылки списком

12
artcrazy
На сайте с 20.03.2010
Offline
135
10746

Добрый вечер!

Есть карта сайта sitemap.xml, необходимо извлечь все ссылки для определения параметров страниц.

Какой программой или скриптом можно реализовать?

Сканировать сайт не вариант.

Буду благодарен за советы.

Chesnok
На сайте с 20.11.2009
Offline
39
#1

Content Downloader это делает точно.

"По-ЧесТному" - Блог честного человека.
DV
На сайте с 01.05.2010
Offline
644
#2

shell есть?

grep и awk легко сделают.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
SeVlad
На сайте с 03.11.2008
Offline
1609
#3
artcrazy:
Есть карта сайта sitemap.xml, необходимо извлечь все ссылки

Любой правильный блокнот с поддержкой регулярок.

Только причем тут

artcrazy:
для определения параметров страниц.

?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
DV
На сайте с 01.05.2010
Offline
644
#4
SeVlad:
Только причем тут

Наверное, ТС хочет запулить эти ссылки в какую-то программу.

SeVlad
На сайте с 03.11.2008
Offline
1609
#5
DenisVS:
Наверное, ТС хочет запулить эти ссылки в какую-то программу.

Мб. Но зачем эта инфа в "ТЗ" (неполная\непонятная)? :)

artcrazy
На сайте с 20.03.2010
Offline
135
#6
SeVlad:
Любой правильный блокнот с поддержкой регулярок.
Только причем тут
?

Спасибо!

Сегодня был ап PR и хотелось бы все страницы сайта проверить на + -

Chesnok
На сайте с 20.11.2009
Offline
39
#7

Вот скрипт допилить руками вывод под себя

<?php


$filename=$_SERVER['DOCUMENT_ROOT'].'/sitemap.xml';

// читаем файл

$html=@file_get_contents($filename);

if(strlen($html)<300)die('Нет файла карты сайта '.$filename);

$dom = new DOMDocument('1.0', 'UTF-8');

@$dom->loadXML($html);

if(!$dom)die('Файл карты сайта '.$filename.' испорчен, - сформируйте карту сайта!');

$root=$dom->documentElement;

$nodelist=$root->childNodes; //список узлов 1-го уровня

foreach ($nodelist as $child) {

if ($child->nodeType==XML_ELEMENT_NODE){

$loc=$lastmod=false;

foreach ($child->childNodes as $child2)

if ($child2->nodeType==XML_ELEMENT_NODE){

if ($child2->nodeName=='loc')$loc=$child2->nodeValue;

elseif ($child2->nodeName=='lastmod')$lastmod=$child2;

}

if(!$loc || !$lastmod)continue;

echo 'Страница <b>'.$loc.'</b> прошлое изменение '.$lastmod->nodeValue."<br>\n";

//$root->removeChild($child); // удалить страницу из sitemap

}

}

?>


---------- Добавлено 06.12.2013 в 20:55 ----------

http://pochesnomu.ru/pr/ можете сразу проверить пыр внутряков
artcrazy
На сайте с 20.03.2010
Offline
135
#8

$lines = file('sitemap.xml');

$allMatches = array();

foreach ( $lines as $line_number => $line ) {
$line = trim($line);
preg_match_all('/(?<=\<loc\>)(.*?)(?=\<\/loc\>)/U', $line, $matches,PREG_SET_ORDER);
if($matches){
if ( $matches[0][0] != '' ) {
$allMatches[] = $matches[0][0];
};
};
};

$list = '';
foreach ( $allMatches as $url ) {
$list .= $url."\n";
};
$fh = fopen('urllist.txt', "w+");
fwrite($fh, $list);
fclose($fh);

// print out list to provide some feedback...
echo $list;

Тоже работает

Vladimir-AWM
На сайте с 07.02.2010
Offline
50
#9

Немного проще вариант :)

$myxml = file_get_contents("sitemap.xml");

preg_match_all("#<loc>(.+?)</loc>#i", $myxml, $match);

$allurl = implode("\r\n", $match[1]);

$fh = fopen("allurl.txt", "w+");
fwrite($fh, $allurl);
fclose($fh);

echo $allurl."<h2>Готово</h2>";
ЖЖ Ферма (http://goo.gl/GSN1es), Твиттер Групп (http://goo.gl/z4dP6J), Многопоточная пинговалка (http://goo.gl/7y40HR), Магазин аккаунтов (http://goo.gl/Wqv19X), Индивидуальные прокси (http://goo.gl/3Njiyj).
DV
На сайте с 01.05.2010
Offline
644
#10

Что-то не впечатляет PHP в этой задаче.

Вот на sh:

cat sitemap.xml | grep http: | awk -F \<loc\> '{print $2}' | awk -F \</loc\> '{print $1}' | sort -u
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий