12

我尝试抓取 sitemap.xml 的所有链接以重新缓存网站。但是 wget 的递归选项不起作用,我只得到响应:

远程文件存在但不包含任何链接——不检索。

但可以肯定的是,sitemap.xml 中充满了“http://...”链接。

我几乎尝试了 wget 的所有选项,但对我没有任何帮助:

wget -r --mirror http://mysite.com/sitemap.xml

有谁知道如何打开网站 sitemap.xml 中的所有链接?

谢谢,多米尼克

4

3 回答 3

15

似乎wget无法解析 XML。因此,您必须手动提取链接。你可以这样做:

wget --quiet http://www.mysite.com/sitemap.xml --output-document - | egrep -o "https?://[^<]+" | wget -i -

我在这里学到了这个技巧。

于 2014-01-02T13:35:19.370 回答
3

虽然这个问题比较老,但谷歌把我发到这里。

我终于用 xsltproc 来解析 sitemap.xml:

站点地图-txt.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
            xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
    <xsl:template match="/">
        <xsl:for-each select="sitemap:urlset/sitemap:url">
            <xsl:value-of select="sitemap:loc"/><xsl:text>&#xa;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

使用它(在这种情况下,它来自缓存预热脚本,因此不保留检索到的页面(“-o /dev/null”),仅打印一些统计信息(“-w ....”)) :

curl -sS http://example.com/sitemap.xml | xsltproc sitemap-txt.xsl - | xargs -n1 -r -P4 curl -sS -o /dev/null -w "%{http_code}\t%{time_total}\t%{url_effective}\n"

(将其重写为使用 wget 而不是 curl 作为练习留给读者 ;-) )它的作用是:

  1. 检索站点地图.xml
  2. 解析站点地图,将 url-list 输出为文本(每行一个 url)
  3. 使用 xargs 在每个 url 上调用“curl”,并行使用 4 个请求)
于 2019-03-05T14:24:38.567 回答
-2

您可以使用其中一种站点映射工具。试试Slickplan。它具有站点爬虫选项,通过使用它,您可以导入现有网站的结构并从中创建可视站点地图。然后,您可以将其导出为 Slickplan XML 格式,其中不仅包含链接,还包含 SEO 元数据、页面标题(产品名称)和一堆其他有用的数据。

于 2018-08-02T12:26:23.420 回答