通过更改源代码来阻止Html Agility Pack

时间:2014-04-28 18:25:44

标签: c# html html-agility-pack

我不想更改一堆HTML文件中的特定文本,并保持其余代码不变。我发现我会使用Html Agility包。所以我写了这样的代码:

        string Url = @"http://www.example.com";
        HtmlWeb web = new HtmlWeb();
        web.UserAgent = @"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36";
        HtmlDocument doc = web.Load(Url);
        doc.Save("a.html");

但问题是所保存的网站来源与原版不同。有没有办法防止改变来源。或者也许还有另一种方法可以在DOM中移动并更改特定内容(例如在chrome开发人员工具中,您可以稍后将其保存为HTML,自动更新)。

-----------编辑--------

例如,在eBay上可以看到它。我无法发布链接,因为它会是广告,但如果您只是在任何商品报价上试用此代码,您就会看到发生了什么。

---------- EDIT2 --------

似乎eBay正在使用iframe,而HAP无法处理它。它内部的标签和标签都被删除了,这可能就是为什么保存的网站差异很大的原因。

2 个答案:

答案 0 :(得分:3)

HtmlAgilityPack(HAP)不一定会写出它读取的相同HTML。如果选中the source,您将看到写入(WriteTo方法)推出已解析的节点。如果原始服务器发送无效的HTML,HAP将在解析过程中将其清除。

如果您需要保存原文,请使用WebClient.DownloadString,然后使用HAP加载该已保存的文件。

答案 1 :(得分:0)

我最近一直在使用HtmlAgilityPack,但我从未遇到过这个问题。

我所做的是以下内容:

var wc = new WebClient();
var html = wc.DownloadString(@"http://www.example.com");
var doc = new HtmlDocument();
doc.LoadHtml(html);
var nodes = doc.SelectNodes("//XPath/Query");

这会改变html内容吗?