选择正确的CSS元素进行RVest抓取时遇到问题

时间:2018-10-14 00:51:49

标签: r web-scraping css-selectors rvest

目标:我正在尝试从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”,这是休斯顿火箭队“总体”列中的值),但这似乎突出显示了一些内容。 ,但不是全部表格,以及网页上其他表格的随机部分。

任何人都可以提供解决方案吗?如果您可以帮助我了解我在哪里/为什么做错了,则可以加分。

谢谢!

3 个答案:

答案 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个元素。