【发布时间】:2020-07-14 23:25:59
【问题描述】:
试图从这个网站上刮掉这张桌子: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 连接更新列表,如果你打开你的 devtools > network > WS 你会看到那里的连接。 ??????
-
它在网页上是空的,我只在我的本地主机 WS 中看到一个 sockjs.node 文件
-
我提到的WebSocket连接在
https://www.investing.com/commodities/real-time-futures,而不是在你的本地网站。 -
哦,我现在看到了,是不是不能抓取数据?因为在控制台中执行此操作允许我获取所有值 document.querySelectorAll("#cross_rate_1 td")].forEach(td => console.log(td.innerText))
-
没错,您可以从
investing.com的控制台获取数据,但是当您从本地网站获取数据时,它没有数据,所以它只会得到空的html.
标签: javascript reactjs web-scraping axios cheerio