【问题标题】:In C# .NET, is there a way to scrape dynamic data from an ajax web page?在 C# .NET 中,有没有办法从 ajax 网页中抓取动态数据?
【发布时间】:2012-01-16 01:08:24
【问题描述】:

我很想轮询一个不断更新动态数据的网页,并获取该数据。我不想每秒重新加载整个页面。有没有办法在不重新加载页面的情况下获取这些数据?

出于演示目的,我正在编写控制台应用程序。

非常感谢!

【问题讨论】:

  • 您是否尝试过模拟真实浏览器的行为,即...进行 AJAX 调用并解析结果?
  • 定义“动态数据”。该页面是否返回在其服务器上经常更新的静态内容,或者该页面是否有大量 JavaScript/AJAX 动态更新其数据?
  • 谢谢大家- 这有点像股票行情。我没有触发更新——它们只是定期发生。我一直在使用 PhantomJS(无头 WebKit 浏览器),但更喜欢 C# 解决方案。

标签: c# html ajax web-scraping


【解决方案1】:

不是真的。对于初学者来说,HTTP 是无状态的。当您执行 HTTP 请求时,您将始终获取静态数据,即使使用动态例程生成它也是如此。

听起来您不能以任何其他方式访问用于构建页面的数据(即直接链接到数据库、Web 服务等)——如果可以的话,您就不会抓取网页了。

即使你能做到这一点,也不会有太大的不同。您仍然需要将您现在拥有的数据与远程服务拥有的数据进行比较。没有某种推送通知,你就是在投票,如果你在投票,是的,你必须一直检查。

【讨论】:

  • 谢谢 Paul- 我告诉上面的人我一直在使用 PhantomJS(一个无头 web-kit 浏览器)来做这件事,结果好坏参半。我不是熟练的 Javascript 开发人员,我更愿意用 C# 来做。我认为浏览器插件可能是更好的方法。
【解决方案2】:

您可以使用返回的标题数据来检查最后修改日期:

HttpWebResponse.LastModified

...但是,设置这个日期完全取决于服务器——所以它可能准确也可能不准确。

防止手动抓取的另一个选项可能是简单地获取返回数据的校验和。您可以将其存储起来并将标记的总和与您存储的总和进行比较。

【讨论】:

  • 谢谢乔治 - 我不确定,但我似乎仍然需要每秒重新加载页面?我在想写一个浏览器插件可能是一个更好的方法,除非威廉的 HTML 应用程序(HTA)的想法有效。
【解决方案3】:

您可以考虑将应用程序编写为 HTML 应用程序 (HTA)。
这为您提供了完整的浏览器功能,以及挂钩事件、在另一个窗口中显示数据或写入磁盘文件的能力。

【讨论】:

  • 谢谢威廉!你有那个链接吗?我从来没有听说过。听起来很有希望。干杯!
猜你喜欢
  • 2018-11-29
  • 2021-08-17
  • 1970-01-01
  • 2017-12-29
  • 2021-12-08
  • 2019-12-11
  • 1970-01-01
  • 2016-03-11
  • 2016-11-29
相关资源
最近更新 更多