使用节点js在网页抓取页面表时遇到问题

时间:2017-06-20 17:16:11

标签: javascript node.js web-scraping screen-scraping cheerio

我正在抓取网页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 td').each(function(element) {
                var tableData = $(element).find('.mp-rating-popup');
                arr.push({ 'title': tableData.text() });
            });
            console.log(arr);
        }
        res.send(arr);

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

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

exports = module.exports = app;

这里arr总是空着。

enter image description here

图像显示表格的结构

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

cheerio不会执行javascript但只是解析html。如果你需要执行javascript(例如,当以后通过ajax加载内容或者应用程序是由前端构建的单页应用程序时),你需要使用phantomjs或者将{{3或者使用新的electron。另一种方法是使用headless chrome with an abstraction。如果您可以控制要爬网的页面(或服务器端渲染页面),那么Jsdom非常棒,但请注意,站点错误会导致节点进程崩溃。

相关问题