簡體   English   中英

Node.js網頁抓取

[英]Node.js web-scraping

我正在嘗試抓取一些代碼,獲取鏈接以及段落中的一些文本。 但是由於某種原因,我的代碼無法正常工作,我已經嘗試了很多次,每次,它都使我感到困惑。

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

我只想返回第二和第三行,以便鏈接和價格,但是我必須這樣做嗎? 我是新來的,我迷路了。

問題在於,當您請求頁面時,聊天框處於折疊/隱藏狀態,並且所有<p>鏈接(顯然是占位符)都是空的。 如果打開聊天框,則會運行頁面上的一些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);
      });
  }
});

您可能希望添加更好的錯誤處理,將價格轉換為數字,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM