【问题标题】:C# - continuously monitoring a webpage for live sports dataC# - 持续监控网页以获取实时体育数据
【发布时间】:2020-05-14 21:29:25
【问题描述】:

我有一个个人 C# 项目,用于跟踪活动期间的实时体育数据。它通过在这项运动的网站上抓取一个 JSON 文件来做到这一点。 JSON 文件在体育赛事期间不断更新。

但是,页面不会自行刷新。现有文件被简单地覆盖。为了根据需要实时监控数据,我必须连续发送请求 2-4 个小时——从事件开始到结束。

我的代码被配置为无限循环,直到我按下 Esc 键:

string url = "https://www.example.com/live/feeds/stats.json";
while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
    try
    {
        string json = (new WebClient()).DownloadString(url);

        // parse JSON
        ...
    }
    catch (...)
    {
        ...
    }
}

我的问题是:

  • 如果我确实一次发送如此大量的请求数小时,我是否有可能将我的 IP 地址列入黑名单并拒绝访问?
  • 是否可以在不发送一百万个请求的情况下连续监控此 JSON 文件?
    • 这可以使用其他语言/框架来完成吗?它不需要在 C# 中。

【问题讨论】:

  • 我建议不要使用 WebClient,而是使用 HttpClient。但是对于这个问题,它应该仍然有效。 “如果我一次发送如此大量的请求数小时,我是否有可能将我的 IP 地址列入黑名单并拒绝访问?” - 也许,是的。您可能希望将请求限制为少于每分钟,如果不是每分钟 1 次的话。 “是否可以在不发送一百万个请求的情况下连续监视此 JSON 文件?”您可以限制请求数,但我怀疑您是否可以将其推送给您。
  • “这可以使用其他语言/框架来完成吗?” 当然可以,但对请求频率有同样的限制。
  • 1) 是的。取决于站点策略 2)如果 json 作为页面上的某个 js 对象存在,您可以尝试使用 Selenium
  • 您到底想对数据做什么?另外,您知道它的更新频率或一般更新时间吗?

标签: c# json web-scraping monitoring webclient


【解决方案1】:

如果你想限制调用次数,你可以在循环中添加一个睡眠:

Thread.Sleep(TimeSpan.FromSeconds(30));

这将在两次通话之间休眠 30 秒,但您可以将其设置为您喜欢的任何频率。 从您的代码 sn-p 中看不出来,但是如果您使用的是异步方法,则应该使用:

await Task.Delay(TimeSpan.FromSeconds(30));

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 2022-11-02
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多