我想实时更新网站上显示的值 网站:http://www.aastocks.com/tc/stocks/market/bmpfutures.aspx 目标html元素ID:font26粗体cls ff-arial
我一直在使用phantomjs代码,如下所示
var page = require('webpage').create();
page.open('http://www.aastocks.com/tc/stocks/market/bmpfutures.aspx', function(status) {
var last_value = -1
setInterval(function() {
var value = page.evaluate(function() {
return document.getElementsByClassName('font26 bold cls ff-arial')[0].innerText
})
if (value != last_value) {
console.log("Value as been updated to " + value)
last_value = value
}
}, 1000)
// phantom.exit()
})
问题在于,当代码首次运行时,它能够获取该值,但是此后,该值将被缓存并且无法更新。
答案 0 :(得分:3)
不幸的是,目标页面上所需的值不会实时更新,因此我们将不得不将page.open
回调中的时间间隔移至主作用域,并仅在必要时刷新页面:< / p>
var page = require('webpage').create();
var last_value = -1;
setInterval(function() {
page.open('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', function(status) {
var value = page.evaluate(function() {
return document.getElementsByClassName('font26 bold cls ff-arial')[0].innerText
})
if (value != last_value) {
console.log("Value as been updated to " + value)
last_value = value;
}
});
}, 3000)
显然,最好不要太频繁地访问目标站点,还应该添加有效的用户代理,设置切合实际的分辨率并轮换IP。
PS
仅查看了页面的源代码,结果发现您甚至不需要PhantomJS,因为<div class="font26 bold cls ff-arial">26,696</div>
就在HTML中。您可以使用任何脚本化的服务器端语言来获取它。
节点迁移更新
您几乎正确地做到了!细微差别构成了选择器。由于所有这些类都属于一个元素,因此需要像这样将它们放下:
const needle = require('needle');
const cheerio = require('cheerio')
setInterval(function(){
needle.get('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx',
function(error, response) {
if (!error && response.statusCode == 200){
const $ = cheerio.load(response.body)
var value = $('.font26.bold.cls.ff-arial').html().trim()
console.log(value)
}
})
}, 1000)