目标:我正在尝试从Basketball-reference.com收集NBA球队的输赢记录。
更广泛地说,我试图更好地了解如何正确使用CSS选择器小工具从网站上抓取指定的元素,但希望能对此问题提供解决方案。
我正在使用的URL(https://www.basketball-reference.com/leagues/NBA_2018_standings.html)上面有多个表,因此我尝试使用CSS选择器小工具指定所需的元素,即“ Expanded Standings”表-关于在页面的1/3处。
我已经阅读了有关{@ {1}}和rvest
软件包的网络抓取的各种教程,以及CSS选择器网络浏览器加载项(我已将其安装在Chrome中,这是我的首选浏览器) )。那就是我要的。
到目前为止,这是我的代码:
dplyr
此代码的结果是错误:
url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"
url %>%
read_html() %>%
html_nodes(css) %>%
html_table()
删除最后一行代码后,我得到:
Error: html_name(x) == "table" is not TRUE
我定义CSS对象的方式/使用CSS选择器工具的方式似乎存在问题。我一直在做的事情是单击所需表的最右边,以使该表周围有一个矩形。
我也尝试单击表格中的特定“单元格”(即“ 65-17”,这是休斯顿火箭队“总体”列中的值),但这似乎突出显示了一些内容。 ,但不是全部表格,以及网页上其他表格的随机部分。
任何人都可以提供解决方案吗?如果您可以帮助我了解我在哪里/为什么做错了,则可以加分。
谢谢!
答案 0 :(得分:2)
library(rvest)
library(dplR)
library(stringr)
library(magrittr)
url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"
css <- "#all_expanded_standings"
webpage <- read_html(url)
print(webpage)
mynode <- html_nodes(webpage,css)
mystr <- toString(mynode)
mystr <- gsub("<!--","",mystr)
mystr <- gsub("-->","",mystr)
newdiv <- read_html(mystr)
newtable <- html_nodes(newdiv,"#expanded_standings")
newframe <- html_table(newtable)
print(newframe)
答案 1 :(得分:1)
library(rvest)
library(dplR)
library(stringr)
library(magrittr)
url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"
css <- "#all_expanded_standings"
webpage <- read_html(url)
print(webpage)
mynode <- html_nodes(webpage,css)
#print node to console - interprets slashes
cat(toString(mynode))
答案 2 :(得分:0)
我尝试下载裸URL html(在javascript渲染之前)。似乎很奇怪,就像表数据位于注释块中一样。在此div中,有一个“扩展的排名”表。
我使用python和beautifulsoup提取了元素,然后删除了注释标记,重新放置了字符串部分,然后将字符串解析为td位。像等级一样奇怪的是第th个元素。