使用C#保存包含全部内容的网页

3
我正在尝试保存一个网页(就像我们在浏览器中做的那样),连同所有内容和格式一起保存。我尝试了WebClient、WebRequest示例,但它们只能下载文本部分和有时的javascript。但没有css和图像等等。 在.Net中是否有任何api,或者任何第三方api可用?
我认为这是可能的,因为很多应用程序都可以运行离线阅读,并且它们以相同的格式和样式显示保存的页面。 如何实现? 有什么想法吗?
编辑1: 可以使用HtmlAgilityPack解析和保存网页。但是否有办法分离主要文章和其他内容,例如广告、其他外部链接。是否有办法区分相关和不相关的内容? (如果这个问题不清楚,我很抱歉)
此外,有人能提供一些建议,这些离线阅读应用程序(如稍后阅读/pocket等)如何保存网页并格式化它。
在C#中有没有类似的方法?

也许这个SO问题可以帮助你。 - tsukimi
3个回答

4
你可以下载一个页面的Html文本,然后解析它并获取<link rel="stylesheet" type="text/css" href="..."><img src="..."/> 元素和属性链接(如hrefsrc)的下载链接。

HtmlAgilityPack是一个可靠且实用的用于解析Html的库。


你好,Ria。我尝试了HtmlAgilityPack,现在我能够下载图片和其他链接,如css和js文件,但页面仍然看起来不太好。没有格式化。我将href和src属性的路径更改为本地目录。但是没有效果。 - Deeps
@Deeps:你好,Deeps,你确定你插入了有效的本地文件地址吗?要使用file:///前缀或者用/代替\,或者使用%20代替空格等等。 - Ria
是的,我已经检查过它们了。路径没问题。我认为CSS和JS文件受到保护,因此下载时没有任何文本。有什么解决方法吗?我尝试为Web请求提供用户代理以下载文件,但没有改变。 - Deeps


2
您可以尝试将页面保存为 mht 文件。这些文件将网页及其所有引用捆绑成一个单独的紧凑文件(.mht)。
请参考以下链接:使用c#处理mht的Stackoverflow主题 注意:MHT是由微软引入的。并非所有浏览器都支持此格式。Opera是唯一支持MHT保存的受欢迎浏览器。Firefox用户可以调用两个插件来处理此文件标准:Mozilla Archive Format和UnMHT。这两个插件都可以安装和使用以打开和保存完整的网页。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接