Очистка содержимого, отображаемого в js, с помощью phantonjs

#javascript #r #phantomjs

#javascript #r #phantomjs

Вопрос:

Я пытаюсь загрузить некоторые файлы с веб-страницы с отображаемым контентом javascript на R, и это сбивает меня с толку.

Файлы находятся в таблице. Моя идея состоит в том, чтобы прочитать и извлечь страницу, очистить таблицу, определить URL-адреса и загрузить файлы. Это первый шаг: прочитайте и извлеките страницу.

После некоторых поисков я нашел решение с использованием phantomjs, которое кажется мне очень приятным. Я не силен в JS, поэтому могу понять код, но у меня есть несколько идей о том, как заставить это работать в моем сценарии.

Мой текущий скрипт:

 // scrape_super_data_science_ml_data.js

var webPage = require('webpage');
var page = webPage.create();

var fs = require('fs');
var path = 'super_data_science_ml_data.html'

page.open('https://www.superdatascience.com/pages/machine-learning', function (status) {
  var content = page.content;
  fs.write(path,content,'w')
  phantom.exit();
});
  

После вызова страница загружается, но без содержимого, отображаемого в JS. Я не знаю, является ли это вопросом времени для отображения содержимого до завершения поиска страницы или что-то еще.

Вот пример моего процесса в R:

 # Scrape page
system("phantomjs scrape_super_data_science_ml_data.js")

# Check results
library(rvest)
library(dplyr)
page <- read_html("super_data_science_ml_data.hmtl")
page %>%  html_text()
  

Кто-нибудь может мне помочь? Любой совет будет очень оценен!

Ответ №1:

Я не уверен, что это именно тот код, который вы используете, но в опубликованном вами коде есть некоторые ошибки. Для кода phantomjs я использую

 var system = require('system');
var page = require('webpage').create();


page.open('https://www.superdatascience.com/pages/machine-learning', function()
{
    console.log(page.content);
    phantom.exit();
});
  

Затем я вызываю код на R с помощью

 # Scrape page
system("phantomjs scrape_super_data_science_ml_data.js > super_data_science_ml_data.html")

# Check results
library(rvest)
library(dplyr)
page <- read_html("super_data_science_ml_data.html")
page %>%  html_text()
  

Первая ошибка заключается в том, что вы забыли заставить R сохранить html с помощью system() , а второй была орфографическая ошибка «super_data_science_ml_data.hmtl»

Что касается вашего вопроса о рендеринге, одна из основных целей phantomjs против rvest заключается в том, что он отображает js как безголовый браузер, а не как более простой скребок, подобный rvest.