Веб-скрапинг с сайта с живым счетом

Я пытаюсь получить данные с сайта с результатами в реальном времени. Я использую node.js с express.js, request.js и cheerio.js, чтобы получить HTML с веб-страницы. Это работает для некоторых частей HTML, но не для активных частей.

Я пытаюсь извлечь данные с веб-сайта http://www.flashresultats.fr/. Когда я использую инструменты разработчика Chrome, я могу видеть содержимое HTML, но когда я использую свой код JavaScript, результат пуст.

Вот захват Chrome того, что я пытаюсь извлечь:

HTML-зачистка

И вот код, который я использую:

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');
    }
})

person Mouette    schedule 03.11.2015    source источник
comment
Пробовали ли вы console.log(html) проверить, пуст ли весь HTML-код или в нем нет элемента с идентификатором g_1_UJzOgxfc?   -  person Buzinas    schedule 03.11.2015
comment
На первый взгляд кажется, что данные загружаются асинхронно на исходном сайте, что объясняет, почему их нет в источнике страницы. Вам нужно будет выяснить источник асинхронно загружаемых данных, а затем напрямую загружать/вычищать оттуда.   -  person Wouter    schedule 03.11.2015
comment
console.log(html) отображают HTML-код страниц, но оценка не отображается в нем. судя по снимку экрана, идентификатор g_1_UJzOgxfc существует в HTML   -  person Mouette    schedule 03.11.2015
comment
Вы должны использовать парсер, который может обрабатывать асинхронную динамическую загрузку контента. Или посмотрите на вызовы Ajax, которые они делают, чтобы получить контент и провести его реинжиниринг.   -  person epascarello    schedule 03.11.2015
comment
stackoverflow.com/questions/28739098/   -  person epascarello    schedule 03.11.2015


Ответы (1)


Если вы получили исходный код своего сайта: просмотрите исходный код: 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();
      });
    });
  });
});
person Alexandr Lazarev    schedule 03.11.2015