javascript-从实时比分网站抓取网页

我正在尝试从实时比分站点获取数据.
我正在将node.js与express.js,request.js和cheerio.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');
    }
})

解决方法:

如果您获得站点的源代码: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();
      });
    });
  });
});
上一篇:前端常用库


下一篇:node实现爬虫,你学会了吗?简简单单