![](/img/trans.png)
[英]How to render a page only after all web-scraping requests are completed in 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.