Я пытаюсь использовать R для очистки различных таблиц на https://www.rotowire.com/football/player.php?id=4307, однако из-за того, что они используют JavaScript, я натолкнулся на несколько ошибок. Я установил библиотеки rvest и V8 и попытался найти подходящие узлы, однако я почти уверен, что неправильно определяю правильные узлы таблицы. Я проверил с владельцами веб-сайта, и они в порядке с людьми, очищающими их данные.
Веб-страница V8 содержит фрагмент кода примера для очистки адресов электронной почты. Я пытался изменить этот код в соответствии с моими целями.
#Loading both the required libraries
library(rvest)
library(V8)
link <- 'https://www.rotowire.com/football/player.php?id=4307'
emailjs <- read_html(link) %>% html_nodes('div') %>% html_nodes('basicStats') %>% html_text()
ct <- v8()
read_html(ct$eval(gsub('document.write','',emailjs))) %>%
html_text()
Безуспешно
Я также пробовал:
emailjs <- read_html(link) %>% html_nodes('div') %>% html_nodes('script') %>% html_text()
ct <- v8()
read_html(ct$eval(gsub('document.write','',emailjs))) %>%
html_text()
А также:
emailjs <- read_html(link) %>% html_nodes('div') %>% html_nodes('basicStats') %>% html_text()
Первый фрагмент кода завершается ошибкой, потому что я неправильно указываю узел, или, по крайней мере, я думаю, что это и есть причина.
Второй набор кода вытягивает все назад, но выдает следующую ошибку:
Error in context_eval(join(src), private$context) :
ReferenceError: window is not defined
Если вы посмотрите на исходный HTML-код, таблица начинается с:
>div id=“basicStats” class=“”)
в строке 289
HTML:
<div class="p-page__middle-box">
<div id="basicStats-header" class="p-page__section-head is-stats">NFL Stats</div>
<div id="basicStats">
<div class="table-load"><div class="table-load__inner"><div class="loader"></div>Loading NFL Stats...</div></div> </div>
<script async>
document.addEventListener('rw:pp-data-available', function(e){
var defaultData = { 'basic': { 'body': [], 'footer': [] }};
var data = (e.detail) ? e.detail : defaultData;
var tableID = "basicStats";
var playerID = "4307";
var primaryStatCat = "Pass";
var stats = {
'pass': [
{ id: 'passComp', startOfGroup: true, header: [{ text: 'Passing', colspan: 6, }, 'COMP'], },
{ id: 'passAtt', header: ['', 'ATT'], },
{ id: 'passPct', header: ['', 'PCT'], },
{ id: 'passYds', header: ['', 'YDS'], },
{ id: 'passTD', header: ['', 'TD'], },
{ id: 'passInt', header: ['', 'INT'], },
],