网页刮刮NBA幻想预测 - R

时间:2016-11-14 06:22:32

标签: r rvest

有许多NBA幻想预测我想以更精简的方式进行。目前我在google sheet中使用了importhtml函数和简单的古老cut'n'paste。

我经常使用R来从互联网上抓取其他数据,但是,我无法让这些表格刮掉。我遇到问题的表位于三个不同的地址(每页1个表),它们是:

1)http://www.sportsline.com/nba/player-projections/player-stats/all-players/

2)https://swishanalytics.com/optimus/nba/daily-fantasy-projections

3)http://www.sportingcharts.com/nba/dfs-projections/

对于我所有其他的抓取活动,我使用包rvest和xml。按照相同的过程,我尝试了下面列出的两种方法,这些方法都会显示输出结果。我确定这与网站上表格的格式有关,但是我找不到能帮助我的东西。

方法1

library(XML)
projections1 <- readHTMLTable("http://www.sportsline.com/nba/player-projections/player-stats/all-players/")
projections2 <- readHTMLTable("https://swishanalytics.com/optimus/nba/daily-fantasy-projections")
projections3 <- readHTMLTable("http://www.sportingcharts.com/nba/dfs-projections/")

输出

projections1    
named list()

projections2
named list()
Warning message:
XML content does not seem to be XML: 'https://swishanalytics.com/optimus/nba/daily-fantasy-projections'

projections3 - 我得到了表格的标题,但没有得到表格的内容。

方法2

library(rvest)
URL <- "http://www.sportsline.com/nba/player-projections/player-stats/all-players/"
projections1 <- URL %>%  
    read_html %>% 
    html_nodes("table")  %>% 
    html_table(trim=TRUE,fill=TRUE)

URL <- "https://swishanalytics.com/optimus/nba/daily-fantasy-projections"
projections2 <- URL %>%  
    read_html %>% 
    html_nodes("table")  %>% 
    html_table(trim=TRUE,fill=TRUE)

URL <- "http://www.sportingcharts.com/nba/dfs-projections/"
projections3 <- URL %>%  
    read_html %>% 
    html_nodes("table")  %>% 
    html_table(trim=TRUE,fill=TRUE)

输出

projections1    
list()

projections2 - 我得到了表格的标题,但没有得到表格的内容。

projections3 - 我得到了表格的标题,但没有得到表格的内容。

如果有人能指出我正确的方向,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

该表的内容是由javascript生成的,因此readHTMLTableread_html找不到任何内容,您可以在下面找到该表

projection1:link

import requests 
url = 'http://www.sportsline.com/sportsline-web/service/v1/playerProjections?league=nba&position=all-players&sourceType=FD&game=&page=PS&offset=0&max=25&orderField=&optimal=false&release2Ver=true&auth=3'
r = requests.get(url)
print r.json()

projections2:view-source:https://swishanalytics.com/optimus/nba/daily-fantasy-projections第1181行

import requests   
url = 'https://swishanalytics.com/optimus/nba/daily-fantasy-projections'
r = requests.get(url)
text = r.content
print eval(text.split('this.players = ')[1].split(';')[0])

projections3:view-source Line 918