【发布时间】:2017-07-26 08:43:10
【问题描述】:
我想抓取this网站
请注意,我在右上角选择了一个特定的日期。
通过关注this 指南
我写了以下代码
library(rvest)
url_nba <- 'https://projects.fivethirtyeight.com/2017-nba-predictions/'
webpage_nba <- read_html(url_nba)
#Using CSS selectors to scrap the rankings section
data_nba <- html_nodes(webpage_nba,'#standings-table')
#Converting the ranking data to text
data_nba <- html_text(data_nba)
write.csv(data_nba,"web scraping test.csv")
根据我的理解,我想要获得的数字(例如,对于勇士队,它将是 94%、79%、66%、59%)以不同的方式“编码”。换句话说,web scraping test.csv 中写的内容是不可读的。
有什么方法可以将“编码数字”转换为“常规数字”?
【问题讨论】:
-
首先,您可以使用
html_table(webpage_nba)从 html 中提取所有表的列表 - 如果您对 html 表感兴趣,这是一个非常方便的功能。但是您确定您的代码实际上完全提取了表格吗?我会怀疑,因为我在这里看到很多 javascript,这并不意味着网络抓取的好东西,例如您的选择未反映在 html 源代码中。您签出 github.com/fivethirtyeight/data/tree/master/nba-elo 了吗?我不是nba的孩子,但也许你可以在那里找到数据? -
确实
html_table(webpage_nba)会给我桌子。但随后出现 2 个问题:1)在第三张表的列中(运行此命令后)有<U+2713>而不是普通数字。我怎么能“翻译”它们? 2)我怎么能从右上角选择某个日期(4月14日季后赛前)。 NBA,只是证明我观点的一个例子 -
我明白了。正常数字不存在,因为它在您选择之前读取“空”表。快速谷歌搜索显示 确实是第一行的复选标记。我会尝试在您选择的网站上进行选择,然后转到源代码(右键单击“查看页面源代码”)并快速执行 strg+f 以获取您在视觉上看到的内容(例如 94%)。如果你找不到它,你就不能轻易地刮掉它,你需要在谷歌上寻找'scrape javascript generated data in R'。我认为没有现成的解决方案,您需要针对您的具体案例进行一些挖掘并尝试一下。
-
与最后一点类似,您可以在筛选所需日期后找到 94%。它与复选标记位于同一位置; (
webpage_nba %>% html_nodes(".pct.div.break"). 关键是 url 检索到最后日期,因此不对应过滤。有一些相关问题处理'search results scraping with R'
标签: html r web-scraping rvest