2017-01-01 107 views
0

我試圖抓取一些代碼,以獲得一個鏈接,並從段落中的一些文本。但由於某種原因,我的代碼不工作,我已經嘗試了很多,每一次,它只是給了我不開。Node.js網絡抓取

var request = require('request'); 
var cheerio = require('cheerio'); 

request('https://bitskins.com', function (error, response, html) { 
    if (!error && response.statusCode == 200) { 
    var $ = cheerio.load(html); 
    $('p', '.chat-box-content').each(function(i, element){ 
     if($(this).attr('style') == 'height: 15px;'){ 
      console.log($(this)); 
     } 
    }); 
    } 
}); 

https://gyazo.com/b80465474a389657c44aeeb64888a006

我只婉它返回的第二和第三行,因此鏈接和價格,但我有什麼關係?我是新的,我輸了。

回答

1

問題是,當您請求頁面時,聊天框處於摺疊/隱藏狀態,並且所有鏈接(顯然佔位符)都是空的。如果打開聊天框,頁面上的一些JavaScript運行並填充列表。

幸運的是,您根本不需要刮屏。該頁面調用API來填充列表。你可以自己調用API。

var request = require('request'); 

request.post('https://bitskins.com/api/v1/get_last_chat_messages', function (error, response, data) { 
    if (!error && response.statusCode == 200) { 
     var dataObject = JSON.parse(data); 
     dataObject.data.messages.forEach(function (message) { 
      // For some reason the message is JSON encoded as a string... 
      var messageObject = JSON.parse(message); 
      // The message object has "message" field. 
      // Just use a regex to parse out the link and the price. 
      var link = messageObject.message.match(/href='([^']+)/)[1]; 
      var price = messageObject.message.match(/\$(\d+\.\d+)/)[1]; 
      console.log(link + " " + price); 
     }); 
    } 
}); 

你可能會希望添加更好的錯誤處理,轉換價格爲若干等

+0

OMFG你是一個赫羅,但我不明白所有的/ \ $(\ d + \。 \ d +)/,我如何讓它顯示%off? –

+0

標記我的答案是否正確,然後我會告訴你關於那些懶惰的東西。 :-) –

+0

完成,告訴我請致電 –