2015-10-01 94 views
2

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

+1

什么是下载'.html'和'.xhtml'之间的差异文件,除了它们的扩展名? – zb226

+0

你试过卷曲吗? –

+0

@ zb226嗨,我个人不知道有什么区别,但我在这里有一个奇怪的问题。我在做一个使用yad --html小部件的项目。 html --uri的输入是一个html页面。只有当我手动将页面下载为xhtml,然后将其重命名为html,然后将该html输入到--uri时,它才起作用。我不知道为什么,我不想知道为什么。我只是想使用命令进行手动过程。这是我的rss网址:http://www.rt.com/rss/news/ – jeevanreddymandali

回答

2

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

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

或者你可以尝试做到这一点使用卷曲

curl https://www.centos.org > centos-org.xhtml 
+0

是的,我试过那些,没用。 :(这里有一个奇怪的问题。我在做一个使用yad --html小部件的项目。 html --uri的输入是一个html页面。只有当我手动将页面下载为xhtml,然后将其重命名为html,然后将该html输入到--uri时,它才起作用。我不知道为什么,我不想知道为什么。我只是想使用命令进行手动过程。这是我的RSS网址:http://www.rt.com/rss/news/ – jeevanreddymandali

+0

这是输出当我打开输出文件使用您的方法:XML解析错误:不匹配的标记。预计:。位置:file:///home/jeevan/centos-org.xhtml第21行第3列: -^ – jeevanreddymandali

0

据我所知,唯一的区别是扩展。

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

+0

尝试手动下载此文件(http://www.rt.com/rss/news/)然后将其重命名为.html,然后馈给yad --html --browser --uri =“file.html”。然后使用一些命令下载它并重命名它并将其提供给yad。输出不适合第二个。 :(我真的需要它 – jeevanreddymandali

+0

这不是一个静态页面,它是一个RSS源,这些往往会有很大的差异 – x13

+0

哦好吧感谢清除,请告诉我一种方式:) – jeevanreddymandali

3

您正在下载的RSS feed。这不是(X)HTML文档,而是它自己类型的XML文档。 您的浏览器正在显示RSS订阅XML的(X)HTML表示。如果您在浏览器中单击“另存为”,则会将该表示保存到磁盘。如果您针对RSS Feed的URL运行wget/curl,则表示您正在下载其XML文件。每个浏览器都可以为RSS提要选择不同的表示形式。没有办法模仿wget/curl

更新1:您需要一个将RSS源XML转换为XHTML(即,类型A的XML转换为类型B的XML)的软件。这是通过XSLT(可扩展样式表语言转换)完成的。没有明显的或“正确”的解决方案,因为可以通过编写任意XSL样式表来自由选择目标表示。请注意,这并不容易。根据您使用的技术堆栈,可能还有预制解决方案。尝试使用谷歌搜索“RSS到XHTML”或类似。

更新2:为了让您一开始,执行以下操作:

  • 安装xsltproc(应该在你的包管理器可用,但:downloadsources
  • 保存下面的样式表rss2xhtml.xsl
  • wget -O - -o /dev/null "http://www.rt.com/rss/news/" | xsltproc rss2xhtml.xsl /dev/stdin > out.xhtml
  • ...和presto,有你的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> 
+0

哦好吧感谢清除,请告诉我一种方式:) – jeevanreddymandali

+0

@jeevanreddymandali,我有一个解决方案,为您尝试 – zb226