在网站中抓取表格 - 如何从元素中找到表格?

Scraping a table within a website - how to find the table from elements?

提问人:Screamh 提问时间:7/4/2021 最后编辑:Screamh 更新时间:7/5/2021 访问量:42

问:

希望从这个网站上抓取一张桌子 -

https://dr16.sdss.org/optical/spectrum/search?id=285009 [基于 https://labrtorian.com/2017/08/14/parse-an-online-table-into-an-r-dataframe-westgards-biological-variation-database/

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))

#loop 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

只有 1 个表,各个字段由用户填写某些字段填充。例如,说 Plate = 400。有一个选项可以设置表上的行数 - 比如 10。

我无法弄清楚如何使用 xpath 从网页中定义表格,元素没有清楚地显示表格。我能想到的最好的是

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

将不胜感激任何启蒙。谢谢。

r html 解析

评论

1赞 user438383 7/4/2021
嗨,您能否阅读一下这篇文章,它向您展示了如何格式化您问题中的代码 - 它使其他人更容易阅读它。使用反引号是最简单的。谢谢。
0赞 Martin Gal 7/4/2021
尝试将 -statement 替换为 ,因为您正在使用一个参数。paste0paste0('//*[@id="results"]/div[1]/div[2][', 1:1, ']')"
0赞 QHarr 7/4/2021
您尚未包含任何库。您能否包含足够的代码来重现这些问题。我在想也许您正在使用 rvest 并且遇到问题,因为表是动态添加的。您是否尝试完成所选的特定选项?
0赞 Screamh 7/5/2021
感谢 user438383 展示如何展示我的案例,不胜感激。
0赞 Screamh 7/5/2021
Martin Gal - 不幸的是,你的建议没有区别,无论如何,谢谢

答: 暂无答案