通过wget命令抓取sitemap.xml的链接

时间:2013-06-27 03:37:40

标签: wget web-crawler sitemap.xml

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

  

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

但是,确保sitemap.xml充满了“http:// ...”链接。

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

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

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

谢谢, 星

3 个答案:

答案 0 :(得分:12)

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

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

我学会了这个技巧here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这个问题比较老的时候,google将我发送到这里。

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

sitemap-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. 检索sitemap.xml
  2. 解析站点地图,以文本形式输出网址列表(每行一个网址)
  3. 使用xargs在每个网址上并行调用4个请求来调用“ curl”)