我正在尝试抓取一个特定的网页,其工作方式如下。
首先页面加载,然后它运行某种 javascript 来获取填充页面所需的数据。我对那个数据很感兴趣。
如果我使用 HtmlAgilityPack 获取页面 - 脚本不会运行,所以我得到它基本上是一个空白页面。
有没有办法强制它运行脚本,以便我可以获取数据?
我正在尝试抓取一个特定的网页,其工作方式如下。
首先页面加载,然后它运行某种 javascript 来获取填充页面所需的数据。我对那个数据很感兴趣。
如果我使用 HtmlAgilityPack 获取页面 - 脚本不会运行,所以我得到它基本上是一个空白页面。
有没有办法强制它运行脚本,以便我可以获取数据?
您正在获取服务器返回的内容 - 与 Web 浏览器相同。当然,Web 浏览器会运行这些脚本。Html Agility Pack 只是一个 HTML 解析器 - 它无法解释 javascript 或将其绑定到文档的内部表示。如果您想运行该脚本,则需要一个 Web 浏览器。您的问题的完美答案将是一个完整的“无头”网络浏览器。它结合了 HTML 解析器、javascript 解释器和模拟浏览器 DOM 的模型,所有这些都协同工作。基本上,这是一个网络浏览器,除了它的渲染部分。目前还没有完全在 .NET 环境中工作的东西。
最好的办法是使用WebBrowser
控件并在 Internet Explorer 中在编程控制下实际加载和运行页面。这不会很快或很漂亮,但它会做你需要做的事情。
另请参阅我对类似问题的回答:Load a DOM and Execute javascript, server side, with .Net讨论了 .NET 中可用的技术来执行此操作。不幸的是,大多数作品现在都存在,但还没有完全存在或没有以正确的方式集成。
您可以为此使用 Awesomium,http: //www.awesomium.com/ 。它工作得相当好,但不支持 x64 并且不是线程安全的。我用它来 24x7 扫描一些网站,它至少连续几天运行良好,但通常会崩溃。