使用phantomjs从谷歌获取股票报价

时间:2016-09-26 03:04:03

标签: javascript jquery web-scraping phantomjs

我正在尝试获取span._Rnb.fmob_pr.fac-l中的文字。我相信这是股票报价的选择器。现在它只是返回控制台open success跳过一行或2然后退出。

var webPage = require("webpage");
var page = webPage.create();
var url = "https://www.google.com/search?q=goog+stock"

page.open(url, function(status){
    console.log("open", status)
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function(status){
        // console.log($)
        var price = page.evaluate(function(){
            return $("span._Rnb").text()
            // return $(".kno-rdesc").find("span").text()
             // return  $("._Rnb").text();  
            // return  document.title       
            // return $(document).find("title").text()
        })
        console.log(price)
        phantom.exit()
    })
})

我不知道如何调试这个。我做了console.log($)但我一无所获。

我能够在页面上获得h3链接标记。我想知道为什么我无法获得股票报价。

2 个答案:

答案 0 :(得分:0)

选择器var eps = Number.EPSILON || 2.220446049250313e-16;有效。

return $("table:nth-of-type(1) tbody > tr > td > span > b").eq(0).text()

答案 1 :(得分:-3)

page.evaluate是一个异步函数。这意味着它会在函数内部的内容实际发生之前立即返回。这是合乎逻辑的,因为页面需要时间来渲染。 但是,您的console.log(price),更重要的是,phantom.exit()会立即发生。

最简单的解决方案是将console.logphantom.exit置于较长的超时时间(5-10秒),以便让页面正确评估。

更合适的解决方案是将某种轮询或甚至事件从评估页面内部传递到外面的phantom.js代码 - 随意进行实验。