1

Я хочу сделать зеркало сайта, который имеет динамическую карту сайта в форме XML.

Конечно, я хочу, чтобы этот файл сайта загружался и обрабатывался так, как если бы это был HTML-файл.

Я попробовал флаг -F для этого файла, но он не сработал, сказав, что он не нашел URL внутри файла.

В настоящее время я предполагаю, что это не будет работать таким образом (потому что wget не для xml), но хотел попросить убедиться, что я ничего не пропускаю.

Содержание xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://MY_SITE/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?><!-- sitemap-generator-url="http://www.arnebrachhold.de" sitemap-generator-version="4.0.8" -->
<!-- generated-on="June 11, 2017 6:05 pm" -->
<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap>
        <loc>http://MY_SITE/sitemap-misc.xml</loc>
        <lastmod>2017-05-31T20:49:06+00:00</lastmod>
    </sitemap>
    <sitemap>
        <loc>http://MY_SITE/sitemap-pt-post-2017-04.xml</loc>
        <lastmod>2017-04-12T16:27:52+00:00</lastmod>
    </sitemap>
    <sitemap>
        <loc>http://MY_SITE/sitemap-pt-post-2017-02.xml</loc>
        <lastmod>2017-02-10T17:50:14+00:00</lastmod>
    </sitemap>
[...]
</sitemapindex>

И каждая дочерняя карта тогда вроде:

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="http://MY_SITE/wp-content/plugins/google-sitemap-generator/sitemap.xsl"?><!-- sitemap-generator-url="http://www.arnebrachhold.de" sitemap-generator-version="4.0.8" -->
<!-- generated-on="June 11, 2017 6:07 pm" -->
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url>
        <loc>http://MY_SITE/32017-SOME_CONTENT/</loc>
        <lastmod>2017-04-12T16:27:52+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://MY_SITE/32017-SOME_OTHER_CONTENT/</loc>
        <lastmod>2017-04-12T16:24:25+00:00</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
    </url>
</urlset>

2 ответа2

1

Ваша проблема в том, что в отличие от ссылок в HTML, wget -r не может переходить по ссылкам в XML. Вы можете обойти это, сначала извлекая карту сайта, находя все URL-адреса в ней и, наконец, извлекая их с помощью другого wget , например:

wget --quiet http://example.com/sitemap.xml --output-document - \
    | egrep -o "http://example\.com[^<]+" \
    | wget -i - --wait 0

Здесь ключ

-i file

--input-file=file

Чтение URL-адресов из локального или внешнего файла. Если - указано как файл, URL считываются из стандартного ввода. (Используйте ./- для чтения из файла с буквальным названием - .) Если используется эта функция, в командной строке не нужно указывать URL-адреса. Если в командной строке и во входном файле есть URL-адреса, они будут получены первыми. Если --force-html не указан, то файл должен состоять из серии URL-адресов, по одному на строку.

Мы предлагаем этот "файл" из стандартного ввода после изменения XML в желаемую форму, т.е. по одному URL на строку с egrep .

0

Если сайт отображает карту сайта в формате HTML, но возвращает его в виде XML, вероятно, отсутствует файл .xsl или .xslt (eXtensible Stylesheet Language Transformation). Это определяет, как на самом деле отображается файл XML; в этом случае, вероятно, в виде HTML. Если вы загрузите это и отобразите, оно, вероятно, даст то, что вы ищете. Кроме того, вы можете изучить XSLT и написать свой собственный.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .