我正在尝试使用公共医疗数据来刮取以下网站:https://prog.nfz.gov.pl/app-jgp/Grupa.aspx?id=Qpc6nYOpOBQ%3d
我只想刮一个或多个表格,在表格前面有一个标题为"Tabela xx procedury ICD-9“,其中xx不是一个固定的数字。
页面上可能有1张,但偶尔也有2-3张这样的表格.而且它们可以与其他页面按不同的顺序出现,因此不可能在网站上表示我想要第n页。
例如,我只对前面有"Icd-9 main“字符串的同一页中的表感兴趣,并跳过其他字符串。有两个这样的表,我想把它们的内容刮到一个data.frame上。它们可能不会按照下面的顺序出现,因此I必须依赖于前面的字符串。偶尔也会没有Icd-9主桌。
Page
----
Icd-10
====
Table
====
Icd-9 main
====
Table
===
Icd-9 main
====
Table
====
Icd-9 supplementary
====
Table
===我只知道按照本教程中的顺序选择第n个表的代码:
https://www.r-bloggers.com/using-rvest-to-scrape-an-html-table/
library("rvest")
url <- "http://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_population"
population <- url %>%
html() %>%
html_nodes(xpath='//*[@id="mw-content-text"]/table[1]') %>%
html_table()
population <- population[[1]]将所有表转储到一个列表中,然后我们就可以按编号选择想要的表。
然而,在我的例子中,我永远不知道要刮哪个表,顺序可能会有所不同,它可以是两个表前面有一个字符串,其中包含"Tabela xx: procedury ICD-9“。
我的问题是,如何根据精确的标题或描述字符串来选择和刮html表。或仅在包含"Tabela ICD-9"的字符串之后出现的一个或多个表。
发布于 2017-04-19 05:02:12
library(rvest)
library(stringr)
doc <- read_html("https://prog.nfz.gov.pl/app-jgp/Grupa.aspx?id=Qpc6nYOpOBQ%3d")
# extract all the nodes that have the title (id = "tytul") or a table
# the cs selector "," is like a boolean OR.
nodes <- doc %>% html_nodes(".tytul,table")
# loop though each node.
signal <- FALSE
my_tables <- list()
j <- 0
for (i in 1:length(nodes)) {
# if title signal previously set and this is a table tag
if (signal & html_name(nodes[i]) == "table") {
cat("Match..\n")
# get the table (data frame)
this_table <- html_table(nodes[i], fill = TRUE, header = TRUE)[[1]]
# append to list
j = j + 1
my_tables[[j]] <- this_table
# and reset the signal so we search for the next one
signal <- FALSE
}
# if the signal is clear look for matching title
if (!signal) {
signal <- nodes[i] %>% html_text() %>% str_detect("Tabela.+ICD 9")
}
}
my_tables[[1]][1:5,]
my_tables[[2]][1:5,]
# > my_tables[[1]][1:5,]
# ICD 9 Nazwa Lb. hospitalizacji UdziaĹ\u0082 (%) Mediana czasu pobytu (dni)
# 1 2.051 ZaĹ\u0082oĹźenie pĹ\u0082ytki sztucznej do czaszki 168 32,31 7
# 2 1.247 Kraniotomia z usuniÄ\u0099ciem krwiaka podtwardĂłwkowego 55 10,58 20
# 3 2.022 Odbarczenie zĹ\u0082amania czaszki 43 8,27 6
# 4 2.040 Przeszczep kostny do koĹ\u009bci czaszki 35 6,73 8
# 5 1.093 Inne aspiracje w zakresie czaszki 33 6,35 5
# > my_tables[[2]][1:5,]
# ICD 9 Nazwa Lb. hospitalizacji UdziaĹ\u0082 (%) Mediana czasu pobytu (dni)
# 1 O35 SĂłd (Na) 239 45,96 8
# 2 89.00 Porada lekarska, konsultacja, asysta 230 44,23 9
# 3 N45 Potas (K) 217 41,73 8
# 4 87.030 TK gĹ\u0082owy bez kontrastu 214 41,15 9
# 5 89.04 Opieka pielÄ\u0099gniarki lub poĹ\u0082oĹźnej 202 38,85 8https://stackoverflow.com/questions/43394268
复制相似问题