2016-01-02 2 views
1

Я пытаюсь очистить некоторые данные, которые отображаются с помощью javascript. Я хотел бы попробовать и идти по пути phatomjs, но я бегу на некоторые вопросы, ссылающихся phantomjs изнутри R.Вызов PhantomJS изнутри R на Mac

Я скачал phatomjs, поместил файл в моем рабочем каталоге, и попытался запустить следующий код найден here:

library(rvest) 

url <- "http://64px.com/instagram/" 

# write out a script phantomjs can process 

writeLines(sprintf("var page = require('webpage').create(); 
page.open('%s', function() { 
    console.log(page.content); //page source 
    phantom.exit(); 
});", url), con="scrape.js") 

# process it with phantomjs 

system("phantomjs scrape.js > scrape.html") 

последняя команда создает эту ошибку:

sh: phantomjs: command not found 

Я сделал некоторые поиски и, возможно, придется делать с моей PATH, но я последовал совету here и он по-прежнему бросает ту же ошибку.

sudo ln -s /phantomjs-2.0.0-macosx/bin/phantomjs /usr/local/bin/ 

Любая идея, почему это не находит исполняемый файл phantomjs?

Спасибо.

Session Info:

R version 3.2.2 (2015-08-14) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X 10.11.2 (El Capitan) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggvis_0.4.2  knitr_1.11  dplyr_0.4.3  plyr_1.8.3  stringr_1.0.0 rvest_0.2.0  
[7] magrittr_1.5 RSelenium_1.3.5 XML_3.98-1.3 RJSONIO_1.3-0 RCurl_1.95-4.7 bitops_1.0-6 
[13] pacman_0.3.0 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.1  xtable_1.7-4 R6_2.1.1  httr_1.0.0  highr_0.5  caTools_1.17.1 
[7] tools_3.2.2  parallel_3.2.2 DBI_0.3.1  htmltools_0.2.6 assertthat_0.1 digest_0.6.8 
[13] shiny_0.12.2 formatR_1.2  mime_0.3  evaluate_0.7.2 stringi_0.5-5 httpuv_1.3.3 
+0

Пробовал ли вы использовать полный путь к исполняемому файлу? – mrub

+0

@mrub Я попробовал систему ("/ phantomjs-2.0.0-macosx/bin/phantomjs scrape.js> scrape.html") и получил то же сообщение – BillPetti

+1

@BillPetti Я понятия не имею о Mac, но '/ phantomjs- 2.0.0-macosx' как каталог под root, кажется мне неправильным. Вы уверены, что это полный абсолютный путь? –

ответ

2

К сожалению, сайт 64pix не использует запрос XHR для данных, заселяет, что «сверху» список на главной странице. Вы можете избежать системного вызова и остаться в-R, если вы выполните следующие действия:

library(rvest) 
library(V8) 

url <- "http://64px.com/instagram/" 
pg <- read_html(url) 

script_data <- html_nodes(pg, "script")[[3]] 
dat <- gsub("\\$\\(function.*$", "", html_text(script_data)) 

ctx <- v8() 
ctx$eval(dat) 
head(ctx$get("accounts")) 
##  username followers followers_now 
## 1  instagram 64131228  45251017 
## 2 justinbieber 23817614  20279386 
## 3 kimkardashian 23519002  22218039 
## 4  beyonce 22207790  21375819 
## 5 arianagrande 21748827  20219621 
## 6 selenagomez 19572601  18456569 

т.е. целевой <script> раздел рядный, который создает данные, обрезать его выключенным (Javascript будет ошибка в противном случае), затем захватить равнодействующую данные. Это небольшая дополнительная детективная работа, но гораздо меньше тяжеловеса, чем использование phantomjs и особенно Selenuim.

Смежные вопросы