【发布时间】:2014-07-28 15:33:45
【问题描述】:
我在解析论坛信息时遇到问题。 下面是一些例子:
获取信息非常容易,因为它们显示在 id = "poe-popup-container" 的 div 中。
问题在于,只有在浏览器允许您查看信息时才会填充该 div。这可以通过使您的浏览器高度非常小并查看 .但是,该 div 将是空的,但只要您向下滚动查看项目,它就会发生变化。
我正在尝试使用 htmlagillitypack 读取其中的节点。问题在于,正如我所解释的,它只有在浏览器说您需要该信息时才具有信息。 因此,当您尝试下载 html 时,该 div 为空。 我也尝试使用网络浏览器下载该页面,但发生了同样的事情。
我正在尝试使用以下代码:
string page = System.Text.Encoding.UTF8.GetString(Webclient.DownloadData("http://www.pathofexile.com/forum/view-thread/966384"));
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@id='poe-popup-container']");
MessageBox.Show(node.InnerHtml);
【问题讨论】:
-
该网站将所有 js 加载到一个捆绑和缩小的文件中,这很难破解。该页面确实在没有此 div 内容的情况下加载,并且我找到了填充它的代码,但缩小使其非常难以理解。无论如何,HtmlAgilityPack 可能不是这项工作的工具,除非您发现该 div 中的数据与 HTML 本身一起提供。
-
再挖一点,内容是用页面自带的json数据渲染的,你可以在源
require(["PoE/Item/DeferredItemRenderer"]的这一行附近找到它,解析json会给你你需要的数据. -
@mot 是的,我也发现了 javascript,问题是当字符串太大时它以 ... 结尾,并且在“硬”示例中可以看到信息丢失跨度>
-
哪个字符串太长了?整个 HTML 还是只是 json?
-
json pastebin.com/ng5fhKj6 看看字符串的末尾,那一个来自于难的例子,因为它可以工作。有没有办法询问完整的字符串?
标签: c# javascript html