Javascript 执行web刮板时出现的问题

Javascript 执行web刮板时出现的问题,javascript,node.js,web-scraping,screen-scraping,Javascript,Node.js,Web Scraping,Screen Scraping,我正在刮网页https://www.g2a.com/rising-storm-2-vietnam-steam-cd-key-global.html 我需要从表数据中获取标题 var express = require('express'); var fs = require('fs'); var request = require('request'); var cheerio = require('cheerio'); var app = express(); app.get('/s

我正在刮网页https://www.g2a.com/rising-storm-2-vietnam-steam-cd-key-global.html

我需要从表数据中获取标题

    var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();

app.get('/scrape', function(req, res) {

    url = 'https://www.g2a.com/rising-storm-2-vietnam-steam-cd-key-global.html';

    request(url, function(error, response, body) {
        if (!error) {
            var $ = cheerio.load(body);


            var arr = [];

            var title = $('.mp-user-rating tr').each(function() {
                var tableData = $('.marketplace-name > .mp-rating-popup');
                arr.push({ 'title': tableData.text() });
            });
        }
        res.send('Check your console!')

    });
})
app.listen('8081');

console.log('Magic happens on port 8081');

exports = module.exports = app;
这里的数据位于第三列,无法获得预期的.mp用户评级tr数据

此图显示了表的结构


任何帮助都将不胜感激。

因此,我转到该页面,并在控制台中运行了此操作

var arr = [];
var title = jQuery('.mp-user-rating tr').each(function(i, element) {
   var tableData = jQuery(element).find('.mp-rating-popup');
   arr.push({ 'title': tableData.text() });
});
console.log(arr);
数组由8个对象组成,每个对象中都有标题

更新:

我用你的代码输入了html信息。我认为问题在于,html是由网站异步加载的,因此,提取html只会检索静态标记。您将需要使用PhantomJS或chrome的无头浏览器来加载网站并允许加载异步信息,然后您可以获取html


有关PhantomJS的一些好文档,请参见此处:

错误是什么?@mplungjan No error您可能会在此处获得更多答案:arr.push{'title':tableData.text}…然后呢?您再也不会接触arr变量。你为什么期望得到什么?我的答案似乎是你想要的。但正如其他人所说,您没有对arr变量做任何操作;但当我通过节点JS时,它不起作用。请详细说明一下。通过url请求检索的HTML页面内容只会是静态的。您需要能够“等待”所有异步数据调用完成,以便能够获得动态生成的html内容。这就是phantomjs的用武之地。它允许您在检索html内容之前等待内容加载。