我尝试爬取网站地图sitemap.xml中的所有链接以重新缓存网站。但是,wget的递归选项无法正常工作,我只得到如下响应:
远程文件存在,但不包含任何链接--不检索。
但是,确实sitempa.xml中充满了“http://…”链接。
我尝试了几乎所有的wget选项,但对我来说都没有用:
wget -r --mirror http://mysite.com/sitemap.xml
有人知道如何打开网站sitemap.xml中的所有链接吗?
谢谢, Dominic
我尝试爬取网站地图sitemap.xml中的所有链接以重新缓存网站。但是,wget的递归选项无法正常工作,我只得到如下响应:
远程文件存在,但不包含任何链接--不检索。
但是,确实sitempa.xml中充满了“http://…”链接。
我尝试了几乎所有的wget选项,但对我来说都没有用:
wget -r --mirror http://mysite.com/sitemap.xml
有人知道如何打开网站sitemap.xml中的所有链接吗?
谢谢, Dominic
看起来wget
无法解析XML,因此您需要手动提取链接。您可以执行以下操作:
wget --quiet http://www.mysite.com/sitemap.xml --output-document - | egrep -o "https?://[^<]+" | wget -i -
我从这里学到了一个技巧。
虽然这个问题比较旧,但我通过谷歌找到了这里。
最终我使用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>
</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是读者的练习;-))