#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.