我想制作一个具有 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 并编写自己的文件。