C# - 如何仅下载HTML的修改部分

时间:2009-06-25 11:57:48

标签: c# html diff

我正在使用C#+ HttpWebRequest。 我有一个HTML页面,我需要经常检查更新。 假设我已经有一个旧版本的HTML页面(例如在一个字符串中),是否有任何方法只能下载页面的“delta”或修改部分,而无需下载整个页面本身并将其与旧版本进行比较版本

8 个答案:

答案 0 :(得分:2)

只有在Web服务器中包含该功能时才会这样做,而且这种可能性很小。所以不,抱歉。

答案 1 :(得分:2)

不适用于任何给定页面,不。

但是如果你写了一个设施来根据时间戳或某种ID给你差异,那么是的。这不是什么标准。您必须使用联合创建页面的订阅源,或创建满足需要的Web服务。当然,您必须控制要监视的Web服务器,这可能不适合您。

答案 2 :(得分:1)

简短的回答是,不。长期的答案是,如果HTML处于版本控制中,并且您编写了一些服务器端代码,给定特定版本号,则为您提供当前版本与指定版本之间的差异,是的。如果HTML不在版本控制中并且您只想将您的版本与当前版本进行比较,那么您需要下载当前版本以在客户端上进行比较或将您的版本上传到服务器并让它执行比较 - 并发回差异。显然,让客户重新下载新版本会更有效率。

答案 3 :(得分:1)

设置IfModifiedSince的{​​{1}}属性。

这不会给你'delta',但如果页面没有被修改,将回复301。

答案 4 :(得分:0)

您拥有旧版本,服务器具有新版本。如何在不知道更改内容的情况下下载delta?服务器如何在不知道您拥有哪个旧版本的情况下提供增量?

显然,没有办法下载整个页面。或者将旧版本上传到服务器(假设服务器具有允许该服务的服务),但这只会增加流量。

答案 5 :(得分:0)

与我之前的其他答案一样,没有办法绕过下载。

但是,如果通过为每个页面修订创建哈希并将当前哈希与新哈希进行比较,则可以不解析html。然后,您将使用diff算法仅提取“delta”信息。我认为大多数现代爬虫都是这样做的。

答案 6 :(得分:0)

如果旧版本保留在Web服务器上,并且当您请求增量时,您为您拥有的版本发送了“版本号”或修改日期,理论上服务器可以对页面进行区分并仅发送区别。但是这两个副本必须在一台机器上才能让任何人知道它们之间的区别。

答案 7 :(得分:0)

您可以使用HttpWebRequest类的AddRange方法。 通过此,您可以指定要下载的资源的字节范围。 这也用于继续中断http下载。

这不是delta,但如果只加载更改的部分,则可以减少流量。