Wget 镜像应该将 xml 视为 html

Wget 镜像应该将 xml 视为 html

我想制作一个具有 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>

答案1

您的问题是,与 HTML 中的链接不同,wget -r无法跟踪 XML 中的链接。您可以先检索站点地图,找到其中的所有 URL,最后使用另一个 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,则命令行上的 URL 将首先被检索。如果 --force-html没有指定,则文件应该由一系列 URL 组成,每行一个。

将 XML 修改为所需形式(即每行一个 URL)后,从标准输入提供此“文件” egrep

答案2

如果网站将站点地图显示为 HTML,但将其返回给您的是 XML,则可能是您缺少 .xsl 或 .xslt(可扩展样式表语言转换)文件。这定义了 XML 文件的实际显示方式;在这种情况下,可能是 HTML 形式。如果您下载并显示它,它可能会生成您想要的内容。或者,您可以学习 XSLT 并编写自己的文件。

相关内容