r - 在网站内抓取表格 - 如何从元素中找到表格?
问题描述
想从这个网站上刮一张桌子 -
https://dr16.sdss.org/optical/spectrum/search?id=285009 [基于 https://labrtorian.com/2017/08/14/parse-an-online-table-into-an-r-数据框-westgards-生物变异数据库/
和
https://www.r-bloggers.com/2015/01/using-rvest-to-scrape-an-html-table/]。
所有数据都是数字。
使用了以下库 -
library(httr)
library(rvest)
library(xlsx)
astro <- session("https://dr16.sdss.org/optical/spectrum/search?id=285009")
xpaths <- paste0("paste0('//*[@id="results"]/div[1]/div[2][', 1:1, ']")
spectable = data.frame(matrix(NA, 0, 10))
#循环遍历 1 个 html 表
for (j in 1:1){
subtable <- astro %>%
`read_html() %>%`
`html_nodes(xpath = xpaths[j] ) %>%`
`html_table(., fill = TRUE)`
subtable <- subtable[[1]]
spectable <- rbind(spectable, subtable)
}
## Error in subtable[[1]] : subscript out of bounds
table.header <- c("Plate", "MJD" ,"FibreID", "specobj_id", "RA", "Dec", "z","zerr", "S/N", "class")
names(spectable) <- table.header
只有一张表,各个字段由用户填写某些字段来填充。例如说 Plate = 400。有一个选项可以设置表格上的行数 - 比如 10。
我无法弄清楚如何使用 xpaths 从网页中定义表格,元素没有清楚地显示表格。我能想到的最好的办法是
xpaths <- paste0("//*[@id="results"]/div[1]/div[2][", 1:1, "]")
返回错误
"unexpected symbol in ..."
第二个问题,大概与第一个有关,是定义行名。脚本使用这个
row.names(spectable) <- 1:nrow(spectable)
其中 nrow = 表中的行数。
返回的错误是
Error in .rowNamesDF<-(x, value = value) : invalid 'row.names' length
将不胜感激任何启示。谢谢你。
解决方案
推荐阅读
- java - Azure postgresql serwer - 如何通过 rest api 公开
- java - 收集器根据对象的属性创建列表列表
- sql - 从 SQL 中输入的日期获取去年的日期
- android - 系统声音无法正常工作
- activitynotfoundexception - 抛出 ActivityNotFoundException
- c# - 非 C# 插件规则/配置文件如何工作(在 CI - Jenkins 中)
- javascript - 如何使用 jasmine 在登录单元测试中接收登录状态?
- python - python是字符串的运算符行为
- amazon-web-services - 在 aws lambda 中有没有一种方法可以在调用处理程序之前触发一个钩子
- php - 无法在 codeigniter 的 MY_Form_validation 中调用自定义验证