R带rvest和V8的刮纸机

R带rvest和V8的刮纸机,r,web-scraping,nodes,v8,rvest,R,Web Scraping,Nodes,V8,Rvest,我试图使用R来处理各种表,但是由于它们使用javascript,我遇到了一些障碍。我已经安装了rvest和V8库,并试图找到合适的节点,但是我很确定我没有正确指定合适的表节点。我与网站所有者进行了核实,他们对人们删除他们的数据没有意见 V8网页包含一段示例代码,用于刮取电子邮件地址。我试图修改代码以符合我的目的 #Loading both the required libraries library(rvest) library(V8) link <- 'https://www.roto

我试图使用R来处理各种表,但是由于它们使用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()
如果查看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'], },
    ],

NFL统计数据
正在加载NFL统计信息。。。
文件.附录列表器('rw:pp数据可用',功能(e){
var defaultData={'basic':{'body':[],'footer':[]};
var数据=(e.detail)?e.detail:defaultData;
var tableID=“basicStats”;
var playerID=“4307”;
var primaryStatCat=“通过”;
变量统计={
“通过”:[
{id:'passComp',startOfGroup:true,头:[{text:'Passing',colspan:6,},'COMP'],},
{id:'passAtt',头:[''ATT'],},
{id:'passPct',头:[''PCT'],},
{id:'passYds',头:[''YDS'],},
{id:'passTD',头:[''TD'],},
{id:'passInt',头:[''INT'],},
],

如果您使用与页面相同的端点来更新内容,则此选项可用。它返回包含所有信息的json

library(httr)
r <-GET("https://www.rotowire.com/football/ajax/player-page-data.php?id=4307&pos=QB&team=GB&opp=")
json <- content(r,as="parsed")
库(httr)

r可能javascript,而不是java
html_节点('basicStats')
不起作用,因为没有这种类型的xml元素。为了指示id,您将使用
html_节点('basicStats')
,对于类,您将使用
html_节点('basicStats')
,这本质上是指查找任何类型的节点(表、div、段落等)与basicStats.FYI的id相结合,您可以通过执行类似于
html_节点('div#basicStats')
的操作来组合节点调用,以查找任何具有basicStats id的div。但是,请注意,这将始终返回1个节点(不是节点),因为basicStats是一个id而不是一个类。因此您可以执行
html_节点('div#basicStats')
。我尝试了:emailjs%html#u节点('div#basicStats')%%>%html#u text()读取#html(ct$eval(gsub('document.write','',emailjs))%%>%html#text()上下文#eval中的错误(join(src),private$context):语法错误:意外标识符
>div id=“basicStats” class=“”)
            <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'], },
    ],
library(httr)
r <-GET("https://www.rotowire.com/football/ajax/player-page-data.php?id=4307&pos=QB&team=GB&opp=")
json <- content(r,as="parsed")