Javascript 执行web刮板时出现的问题
我正在刮网页https://www.g2a.com/rising-storm-2-vietnam-steam-cd-key-global.html 我需要从表数据中获取标题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
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内容之前等待内容加载。