2

嗨,当我尝试右键单击并保存页面时,网页保存为 .xhtml 。但是当我尝试使用 wget 或 curl 下载它时,它被下载为 .html。有什么方法可以下载它,就像 .xhtml 一样?我真的需要它。

4

3 回答 3

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>
于 2015-10-01T09:44:27.830 回答
2

您可以通过添加 -O 参数来做到这一点:

wget -O centos-org.xhtml https://www.centos.org

或者您可以尝试使用 cURL 执行此操作

curl https://www.centos.org > centos-org.xhtml
于 2015-10-01T09:32:34.373 回答
0

Afaik 唯一的区别是扩展名。

wget http://website.com/index.html && mv index.html index.xhtml

于 2015-10-01T09:39:54.123 回答