Соскребите содержимое с помощью phantonjs - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь загрузить некоторые файлы с веб-страницы с отображаемым на 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 Ответ

1 голос
/ 24 марта 2019

Я не уверен, что это именно тот код, который вы используете, но в опубликованном вами коде есть некоторые ошибки.Для кода 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 vs rvest состоит в том, что он визуализирует js как браузер без заголовка, а не как простой скребок, какrvest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...