我试图从实时分数网站获取数据。 我正在使用带有express.js,request.js和cheerio.js的node.js来从网页获取HTML。 它适用于HTML的某些部分,但不适用于实时部分。
我试图从网站http://www.flashresultats.com抓取数据。 当我使用Chrome开发者工具时,我能够看到HTML内容,但是当我使用我的JavaScript代码时,结果是空的。
以下是我想要提取的内容的Chrome捕获:
这是我正在使用的代码:
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app = express();
url = 'http://www.flashresultats.fr'
request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
var myvar = $('#g_1_UJzOgxfc').html();
console.log(myvar);
}
else {
console.log('Error');
}
})
答案 0 :(得分:4)
如果您获得了网站的源代码:view-source:http://www.flashresultats.fr/,请按ctrl+f
并搜索g_1_UJzOgxfc
节点,您将无法找到它。在加载初始文档后,肯定会在javascript的帮助下生成它。这就是为什么你不能通过发送一个简单的请求来获得它。
因此,为了获得动态创建的元素,您应该运行嵌入在您的请求中收到的正文中的javascript。您可以使用PhantomJs bridge模块获取它:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://www.flashresultats.fr", function (status) {
page.evaluate(function () { return document.getElementById('g_1_UJzOgxfc'); }, function (result) {
console.log('g_1_UJzOgxfc element is:' + result);
ph.exit();
});
});
});
});