HTML Rvest scrape 没有显示表格

HTML Rvest scrape not bringing up tables

我无法从该网站抓取 table。当我在 table 数据之后时,我得到的只是 1 行代码。 网站在这里。 https://mc.championdata.com/anz_premiership/index.html?competitionid=11035&matchid=110350101 和我的代码如下。

library(xml2)
library(rvest)
library(XML)

datalist = list()

web<- render_html(url = 'https://mc.championdata.com/anz_premiership/index.html?competitionid=10574&matchid=105740101')


#xpath =  '//*[@id="cd6364_SHELL_grids"]/div[1]/table'
#print(xpath)
  
#tables<- html_nodes(web, 'table')
track<- web %>%
  html_nodes(xpath = '//*[@id="cd6364_SHELL_grids"]/div[1]/table') %>%
  html_table()```

与大多数现代数据丰富的网页一样,您要查找的数据不在通过 http 请求发送给 url 的 html 文档中。相反,您的浏览器会收到 html,其中包含 javascript 代码。您的浏览器可以 运行 此 javascript 代码,提示它发送进一步的 http 请求以获取填充页面的实际序列化数据(通常为 json 格式)。当您使用 rvest 或其他静态网络抓取工具进行网络抓取时,原始 html 以纯文本形式接收,并且没有 javascript 引擎会自动处理它以生成请求json.

因此,您不能从该页面获取数据的原因是数据不在您下载的页面

要解决这个问题,您必须使用 Web 浏览器中的控制台(通过 F12)并通过观察正在发出的 XHR 请求找出 json 所在的 url通过您的浏览器(或查找嵌入在 html 文本中的直接链接)。在您的例子中,json 地址是 https://mc.championdata.com/data/11035/fixture.json?_=1593081934709

您可以直接解析 json 并将其塑造成这样的数据框:

url <- "https://mc.championdata.com/data/11035/fixture.json?_=1593081934709"
fixture <- jsonlite::read_json(url)$fixture$match

df <- do.call(rbind, lapply(fixture, function(x) 
  as.data.frame(x[names(x) %in% names(fixture[[20]])])))

dplyr::as_tibble(df)
#> # A tibble: 45 x 22
#>    awaySquadName matchType homeSquadId homeSquadShortC~ homeSquadNickna~
#>    <fct>         <fct>           <int> <fct>            <fct>           
#>  1 Central Pulse H                 802 TAC              Tactix          
#>  2 Northern Mys~ H                8120 NS               Stars           
#>  3 WBOP Magic    H                 808 STE              Steel           
#>  4 Northern Mys~ H                 809 WBM              Magic           
#>  5 Mainland Tac~ H                 808 STE              Steel           
#>  6 Central Pulse H                8120 NS               Stars           
#>  7 Mainland Tac~ H                8120 NS               Stars           
#>  8 WBOP Magic    H                 802 TAC              Tactix          
#>  9 Southern Ste~ H                 805 MYS              Mystics         
#> 10 Southern Ste~ H                8120 NS               Stars           
#> # ... with 35 more rows, and 17 more variables: matchStatus <fct>,
#> #   roundNumber <int>, homeSquadName <fct>, awaySquadNickname <fct>,
#> #   venueId <int>, awaySquadId <int>, venueCode <fct>, localStartTime <fct>,
#> #   matchId <int>, finalCode <fct>, finalShortCode <fct>, venueName <fct>,
#> #   utcStartTime <fct>, awaySquadCode <fct>, homeSquadCode <fct>,
#> #   awaySquadShortCode <fct>, matchNumber <int>

reprex package (v0.3.0)

于 2020-06-25 创建