【问题标题】:How do I monitor a constantly updating value on a website?如何监控网站上不断更新的值?
【发布时间】:2020-09-13 18:06:01
【问题描述】:

我是网络抓取的新手,我不确定解决这个问题的最有效方法是什么。该项目主要使用 Python,但为了提高效率,我愿意使用其他语言。

想象一下网站上一些 js 驱动的价值,比如实时访问者数量,或者一些金融资产的价格。加载网站后,随着新信息的出现不断更新。我想要的是亚秒级采样一个这样的值,但自然地,我不想用请求轰炸服务器,这无论如何都会破坏准确性。

我正在考虑使用 selenium 或 PyQt webkit 加载网页,然后运行一个简单的循环来监视值并在发生更改时更新数据库。我不是在寻找可以自己解决的代码,但我不确定这是否是解决此问题的正确方法,或者是否有更有效的方法。

谢谢

【问题讨论】:

  • 我会尝试查看网页的源代码,看看它从哪里获取数据。然后看看您是否可以轮询或订阅相同的提要。他们可能没有使用 CORS 等

标签: javascript python web-scraping


【解决方案1】:

我通过完全使用 Python 和 Selenium 完成了您所指的操作。我不明白为什么 Python 不是用于您的特定用例的语言。我能看到的唯一问题是网页是否不断(或缓慢)变化。

我遇到了一个问题,即重新设计了网页并通过我的 Xpath。我所要做的就是更正 Xpath 以反映新位置,它仍然有效。

另一种解决方案可能是检查它们是否已经是您尝试抓取的网页的现有 API。如果是这种情况,您可能不必进行任何网络抓取,只需调用 API 并获取您的价值。这将是最有效的方法,但如果没有 API 可以调用,显然是不可能的。

旁注:我对 Python 最满意,并且在尝试自动执行任务时通常默认使用它。可能有更多高性能语言可供使用,但我的选择是 Python。

【讨论】:

    【解决方案2】:

    这是潜在的破坏性操作,不适用于使用 const 声明的任何内容(这会阻止重新分配)。您可以尝试在Proxy 中“包装”您需要监视的数据

    在这个例子中:

    1. commodities 变量存在于页面上,并且是您要跟踪的变量。
    2. track_commodities 函数通过 Selenium 注入和执行。它包含一个记录任何更改的小“db”。

    // inject that function and call it via Selenium >>>
    function track_commodities () {
    
      track_commodities.db = { gold: []
                             , silver: []
                             , copper: []
                             };
    
      commodities = 
        new Proxy(commodities, {
          set: (o, k, v) => {
            track_commodities.db[k].push(v);
            o[k] = v;
            return true;
          }
        });
    }
    
    track_commodities();
    // <<<
    
    
    // Normal execution of your web page...
    commodities.gold = 20;
    commodities.gold = 30;
    commodities.gold = 40;
    commodities.gold++;
    commodities.gold++;
    
    
    console.log(commodities.gold);
    console.log(track_commodities.db.gold)
    <!-- This is the JS value you need to track -->
    <script>
    let commodities = { gold: 0
                      , silver: 0
                      , copper: 0
                      };
    </script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 2018-04-29
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2017-05-29
      相关资源
      最近更新 更多