如何在页面加载后抓取包含使用 JavaScript 更新的数据的页面?

Ale*_*ena 5 javascript c# web-scraping

我试图刮一页。一切正常,但是当值更新时,页面的源代码在一分钟内仍然相同。即使我在互联网连接速度较慢的情况下刷新页面时,我也会首先看到旧数据,并且只有在页面完全加载后,值才是最新的。我猜 javascript 会更新它们。但是它仍然必须以某种方式下载它们。

我如何获得当前值?

我用 C# 编写我的程序,但如果你有一些想法/建议/示例语言并不重要。

谢谢你。

Mel*_*Mel 2

你是对的 - javascript 可能会在加载后更新数据。

我可以想到三种方法来处理这个问题:

  1. 使用网络浏览器控件 - 我猜您使用 HttpWebRequest 对象从站点检索值。如果您需要让 javascript 运行,这将不起作用。您可以使用 webbrowser 控件,让 javascript 运行并从 DOM 检索值。我唯一不喜欢这种方法的一点是,它感觉像是一种黑客攻击,而且对于产品应用程序来说可能太笨重了。您还需要知道何时读取 DOM 的内容(更新可能正在后台进行)。Google“C# WebBrowser Control Read DOM Programmatically”,或者您可以在此处阅读更多相关信息。

  2. 我个人比以前更喜欢这个,但它并不总是有效。首先,您需要通过 firebug 或其他方式检查网站,并查看从后台调用了哪些 url。举例来说,该网站正在使用 JavaScript 更新股票报价。最有可能的是,它使用异步请求从 Web 服务检索更新的信息。使用firebug,您可以在 NET>XHR 下查看它。现在是最困难的部分。好吧,看一下请求和返回的值。这个想法是,您可以尝试检索自己的值并解析内容 - 这比抓取页面容易得多。问题是,您需要进行一些逆向工程才能使其正确。您可能还会遇到身份验证和/或加密问题。

  3. 最后,我最喜欢的解决方案是直接询问[您正在抓取的网站]的所有者。