.net - 如何判断 VB.net 中的网页何时更改了 x%?

标签 .net vb.net http-headers

我正在尝试编写一个小实用程序,它会定期检查并告诉我网页(可以是任何 URL)的内容是否/何时发生了更改。我已经阅读了其他帖子,但它们并没有真正回答我的问题(据我所知)。

我知道静态页面有一个最后修改的标题。但是,动态页面呢?我得到了 Oli 的评论,即存储内容的散列有效,但这并不是真正的想法,因为页面上可能只是有一个时间戳(页面生成的日期时间)。显然,在这种情况下,即使没有任何重大变化,每个请求的内容也会有所不同。

所以,现在我想把它与“变化”的百分比联系起来。例如,超过 5% 的更改将导致“已更改”逻辑运行。

我很想听听有关如何以有意义的方式可靠地判断页面何时更改的任何想法。

最佳答案

一种解决方案是确定动态页面的静态部分,如果它们被更新,您会认为它们“已更改”。使用 diff工具(下面的示例)将原始页面源与更新的页面源进行比较。但是,如果您有几十个页面,为页面的每个实例手动确定这些部分不一定能很好地扩展。

两个想法:

1) 使用 HTMLAgilityPack (.NET 库)来解析页面 DOM 并为存储的、先前扫描的页面和最近扫描的页面执行不同页面元素的计数。使用您认为令人满意的公式来标记“更改”。一个非常简单的例子是旧副本有 8 个 anchor <a>标签,而新的只有 5 个。

2) 使用差异库 DiffPlex http://diffplex.codeplex.com/以确定字和行的变化。您将需要通过分析为会触发有效“更改”的单词和行添加提出更改基线。

        var d = new Differ();
        var inlineBuilder = new InlineDiffBuilder(d);
        var result = inlineBuilder.BuildDiffModel(OldText, NewText);
        int inserted, deleted, modified = 0;
        foreach (var line in result.Lines)
        {

            if(line.Type == ChangeType.Inserted)
                inserted++;
            else if(line.Type == ChangeType.Deleted)
               deleted++;
            else if (line.Type == ChangeType.Modified)
                modified++;


        }
        // some base line formula/threshold you come up with through analysis
        if (deleted + inserted + modifed > 10)
           changed = true;
    }

关于.net - 如何判断 VB.net 中的网页何时更改了 x%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837801/

相关文章:

.net - 从 VB.net 调用时 native c++ dll 运行速度比从 native .exe 调用时运行速度慢

caching - IE6 和缓存

jquery - Chrome 扩展 : refuse header "date" in ajax request

http - HTTP 部分 GET 是一种可靠的机制吗?

c# - Roslyn:从没有变量名的 catch 声明中获取符号

C#计算打开文件的MD5?

c# - 使用 .NET Reflector 的示例

c# - 声明一个总是抛出异常的方法?

asp.net - 提供对 session 对象的强类型访问

c# - 与 C# 中的 block 等效?