首页 > 解决方案 > Cheerio,axios,reactjs 到 web 从返回空列表的网页上刮下一张桌子

问题描述

试图从这个网站上刮掉这张桌子:https ://www.investing.com/commodities/real-time-futures

但是由于某种原因,当我尝试获取数据时,我不断得到一个空列表。

这就是我正在做的获取数据并解析它:

componentDidMount() {
    axios.get(`https://www.investing.com/commodities/real-time-futures`)
      .then(response => {
        if(response.status === 200)
          {
            const html = response.data;
            const $ = cheerio.load(html);
            let data = [];
            $('#cross_rate_1 tr').each((i, elem) => {
                data.push({
                  Month: $(elem).find('td#left noWrap').text()
                })
            });
            console.log(data);
          }
        }, (error) => console.log('err') );
  }

这是我试图抓取的源代码特定部分的屏幕截图。

在此处输入图像描述

任何帮助深表感谢。

标签: javascriptreactjsweb-scrapingaxioscheerio

解决方案


如前所述,有问题的表通过 websocket 连接不断更新。您可以尝试通过 1) 连接到 websocket 或 2) 抓取动态生成的 html 来获取数据。

仅对于数据快照而不是连续时间序列,您可以使用浏览器抓取扩展。这样你就不会关心 websocket 的实现了。

我已经为您确定了价格数据 CSS 选择器并创建了一个抓取配置以与开源浏览器扩展https://github.com/get-set-fetch/extension一起使用。

"eLtI4gnapZTLDsIgEEV/hejGLrC+F25N3OrCpUlD6FhIWmiY0f6+1Hd9EJsuSEguGRg4h8fSlS0Km/r3ZesjHR0g2zrtKzL2IYg1wOqLZ2hEicrSwxhFVOIyjquqGmpzAiRtsqG0RSxv5TVg7EDkvC7AD9etmqJlQBz9ONRW8HvgJ06UwD2HpCV/gtpFylFnC39A/s51A3qphMlg94ruBbtNCe5iMr5/EP/S3ICZf4H5myP/0tv3rSIm/oiQjBmlS0OKS6XzdDCJ9iYQT8PxLBzPw/Ei6rWwpZ0dZ2cMF5M="

在扩展里面做:新项目>配置哈希>粘贴上面的哈希(不带引号)>保存,刮,查看结果>导出为csv。

免责声明:我是扩展作者。


推荐阅读