嗨,当我尝试右键单击并保存页面时,网页保存为 .xhtml 。但是当我尝试使用 wget 或 curl 下载它时,它被下载为 .html。有什么方法可以下载它,就像 .xhtml 一样?我真的需要它。
3 回答
您正在下载RSS 提要。这不是一个 (X)HTML 文档,而是它自己的 XML 文档类型。您的浏览器正在显示 RSS 提要 XML 的 (X)HTML 表示。如果您在浏览器中单击“另存为”,则会将该表示保存到磁盘。如果您正在wget
/curl
针对 RSS 提要的 URL 运行 /,则您正在下载其 XML 文件。每个浏览器都可以为 RSS 提要选择不同的表示形式。wget
仅使用/是无法模拟的curl
。
更新 1:您需要一个将 RSS 提要 XML 转换为 XHTML 的软件(即将 A 类型的 XML 转换为 B 类型的 XML)。这是通过XSLT(可扩展样式表语言转换)完成的。没有明显或“正确”的解决方案,因为可以通过编写任意 XSL 样式表来自由选择目标表示。请注意,这并不是特别容易。根据您使用的技术堆栈,可能还有可用的预制解决方案。尝试在谷歌上搜索“rss to xhtml”或类似内容。
更新 2:要让您开始,请执行以下操作:
- 安装
xsltproc
(应该在你的包管理器中可用,但是:下载,来源) - 将下面的样式表保存到
rss2xhtml.xsl
wget -O - -o /dev/null "http://www.rt.com/rss/news/" | xsltproc rss2xhtml.xsl /dev/stdin > out.xhtml
- ...然后,你的 HTML
提供的样式表非常基本,如果您想学习这些东西,可以根据需要进行自定义 :)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- http://stackoverflow.com/a/32884376/1529709 -->
<xsl:output method="html" indent="yes"/>
<xsl:template match="text()"></xsl:template>
<xsl:template match="item">
<h2><a href="{link}"><xsl:value-of select="title"/></a></h2>
<p><xsl:value-of select="description" disable-output-escaping="yes"/></p>
</xsl:template>
<xsl:template match="/rss/channel">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title><xsl:value-of select="title"/></title>
<style>img,p {display:block;float:none;}</style>
</head>
<body>
<h1><a href="{link}"><xsl:value-of select="title"/></a></h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
您可以通过添加 -O 参数来做到这一点:
wget -O centos-org.xhtml https://www.centos.org
或者您可以尝试使用 cURL 执行此操作
curl https://www.centos.org > centos-org.xhtml
Afaik 唯一的区别是扩展名。
wget http://website.com/index.html && mv index.html index.xhtml