【问题标题】:Web Scraping Columns from Web with R使用 R 从 Web 中抓取列
【发布时间】:2020-01-09 18:56:34
【问题描述】:

我有这个网站,我想提取前 4 列。但它不起作用。我是 WebScraping 的初学者,任何帮助都会很棒:

https://projects.fivethirtyeight.com/2017-nba-predictions/

我要提取每一列:ELO -- CARM-ELOe 以此类推

这是我到目前为止所做的:

url_nba <- 'https://projects.fivethirtyeight.com/2017-nba-predictions/'

webpage_nba <- read_html(url_nba)

data_nba.1 <- html_nodes(webpage_nba,'.num elo original desktop')
data_nba.2 <- html_nodes(webpage_nba,'.num elo carmelo')

在此之后,我想放入一个数据框。

有什么帮助吗?

【问题讨论】:

  • 您说的是前四列,即 elo、carmelo、1-Week Change 和 Team Logo。真的是这样吗?如果是这样,您希望如何处理徽标?

标签: r web-scraping rvest


【解决方案1】:

查看 HTML 代码,表格有点变形。一种方法是抓取整个表格,然后收集 Elo 分数。

寻找css标签“table”,找到了三个表。手动查看每一个,表 3 是感兴趣的。

library(rvest)
url_nba <- 'https://projects.fivethirtyeight.com/2017-nba-predictions/'
webpage_nba <- read_html(url_nba)

#collect the tables from the page
tables <- html_nodes(webpage_nba,'table')

#Process the table of interest (returns a list of 1)
resultdf <- tables[3] %>% html_table(fill=TRUE)
resultdf <- resultdf[[1]]

变量“resultdf”是感兴趣表的数据框。由于存在一些隐藏字段和其他非标准信息,因此需要进行一些清理以删除前几行、重命名列并删除空白列。

【讨论】:

  • 非常感谢!你的意思是:HTML code the table is a bit mis-shaped
  • 如果你看resultdf,前两行是空白的,列标题在第3行。如果你看一下表格,所有这些都很容易解决。
【解决方案2】:

当您获得相等长度的节点列表时,您可以使用 css 选择器来定位您想要的列,然后 cbind 然后转换为数据框作为替代方案。下面的选择器会导致一个干净的输出数据框。

library(rvest)
library(magrittr)

page <- read_html('https://projects.fivethirtyeight.com/2017-nba-predictions/')
df <- setNames(data.frame(cbind(
  html_text(html_nodes(page, 'td.original')),
  html_text(html_nodes(page, 'td.carmelo')),
  html_text(html_nodes(page, '.change')),
  html_text(html_nodes(page, '.team a'))
)),c('elo','carmelo','1wkchange','team'))

print(df)

【讨论】:

  • 非常感谢!但我有一个不太重要的问题:为什么与列 elo 相关的标签是 td.original 而不是 .num elo original desktop我错过了什么?
  • num elo original desktop 是一个多值类属性,即类属性有多个值。这更脆弱,因为一个或多个可能发生变化的机会更大,并且匹配的值也更多,因此可能更慢 - 所以你不想要岸边选择器;包括在可能的情况下使用单类多值(仔细选择)。最后,它在 th 和 td 上匹配。我只想用最短、最快的选择器匹配实际的 td 元素。 td.original 唯一标识的感兴趣元素和类 css 选择器是第二快的(仅次于 id)。
  • 我无话可说!谢谢!我正在通过 R 开始网络抓取。如果我想提高我的技能,你是否建议进行任何研究?学习 HTML 语言会对我有帮助吗?
  • 了解基本的 html 和 css 选择器(包括高级选择器)会有所帮助。如果您访问我的个人资料,您会在“关于”部分看到许多共享链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多