javascript - 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') );
}
这是我试图抓取的源代码特定部分的屏幕截图。
任何帮助深表感谢。
解决方案
如前所述,有问题的表通过 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。
免责声明:我是扩展作者。
推荐阅读
- jmeter - Taurus / JMeter 停留在准备阶段
- yaml - 合并 YAML 数组,忽略 YAML 中的其他字段
- javascript - D3 径向树状图仅显示部分
- java - 字符解码失败。值 [%3] 的参数 [info] 已被忽略
- spring-cloud - 如何设置rockemq消息过期时间?
- git - 文件跟踪忽略的 git 临时签出
- python - 在 barh“龙卷风”图表中调整比例
- python - 使用 Pandas 对列进行多个聚合
- c# - 有什么方法可以调用数据库数据在单元测试中提供
- docker - 重启后 - docker-compose 正在抛出 OOM-Killer