【问题标题】:Scraping a table from a website using R (Rvest).. or VBA if possible如果可能,使用 R (Rvest).. 或 VBA 从网站上抓取表格
【发布时间】:2017-10-15 14:04:20
【问题描述】:

我正在尝试从此 URL 中抓取表格: "https://hutdb.net/17/players" 我花了很多时间学习 rvest 和使用 selectorgadget,但是每当我尝试获得输出时,我总是会遇到相同的错误(Character(0))。

library(rvest)
library(magrittr)

url   <- read_html("https://hutdb.net/17/players")
table <- url %>%
  html_nodes("td") %>%
  html_text()

任何帮助将不胜感激。

【问题讨论】:

  • 数据是动态加载的,无法直接从html中获取。但是,查看“网络”,我们可以在 hutdb.net/ajax/… 找到格式良好的 JSON

标签: r scrape rvest


【解决方案1】:

数据是动态加载的,不能直接从html中获取。但是,以 Chrome DevTools 中的“网络”为例,我们可以在 https://hutdb.net/ajax/stats.php?year=17&page=0&selected=OVR&sort=DESC 找到格式良好的 JSON

library(jsonlite)
dat <- fromJSON("https://hutdb.net/ajax/stats.php?year=17&page=0&selected=OVR&sort=DESC")

输出如下:

#     results aOVR    id League Year Card Team              Player Position Type Shoots  HGT
# 1      6308 6308  <NA>   <NA> <NA> <NA> <NA>                <NA>     <NA> <NA>   <NA> <NA>
# 2      <NA> 2030 11782    NHL   17  MOV  OTT       Erik Karlsson       RD  OFD  Right  6'0
# 3      <NA> 2060 11785    NHL   17  MOV  TBL       Victor Hedman       LD  TWD   Left  6'6
# 4      <NA> 2008 11791    NHL   17  MOV  CHI        Patrick Kane       RW  SNP   Left 5'11
# 5      <NA> 2058 13845    NHL   17  SCE  ANA        Ryan Getzlaf        C  PWF  Right  6'4
# 6      <NA> 2074 11824    NHL   17  MOV  BOS       Brad Marchand       LW  TWF   Left  5'9
# 7      <NA> 2008 11829    NHL   17  MOV  EDM      Connor McDavid        C  PLY   Left  6'2
# 8      <NA> 2048 11840    NHL   17  MOV  WSH   Nicklas Backstrom        C  PLY   Left  6'1
# 9      <NA> 2058 11841    NHL   17  MOV  PIT       Sidney Crosby        C  PLY   Left 5'11
# 10     <NA> 2065 13644    NHL   17 TOTY  WPG        Patrik Laine       RW  TWF  Right  6'3
# 11     <NA> 2008 13645    NHL   17 TOTY  EDM      Connor McDavid        C  PLY   Left  6'2
# 12     <NA> 2039 13680    NHL   17 TOTY  LAK        Drew Doughty       RD  TWD  Right  6'1
# 13     <NA> 2063 13689    NHL   17 TOTY  BOS    Patrice Bergeron        C  TWF  Right  6'2

【讨论】:

  • 这是一个好的开始,但是这似乎只从第一页引入记录,如何从所有页面(整个表)中提取数据?
  • 不确定。也许使用 URL 中的page= 参数一页一页地抓取页面。抓取时,对服务器保持温和并在请求之间添加偏移时间(Sys.sleep()
  • 是的,我最终遍历了页码并获取了所有数据。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多