rvest:用前面的标题抓取多个表

rvest: scraping multiple tables with preceding titles

我想抓取这个 url: https://prog.nfz.gov.pl/app-jgp/GrupaSzczegoly.aspx?id=2AfRAM1JYDoYzktSMvdOhFiPm2Fnh67q

它列出了每个地区的医疗程序统计,html结构为:标题和对应的table,全国所有地区16次。

简体html:

<div class="tytul">01 - NameOfDistrict_01</div> 

<table>
...
<tr>        
<td class="lewa">No. of procedures</td>        
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">950</span>
</td>
...
</table>


<div class="tytul">02 - NameOfDistrict_02</div> 
<table>
<tr>        
...
<tr>        
<td class="lewa">No. of procedures</td>        
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">350</span>
</td>
...
</td>
</table>


<div class="tytul">nn - NameOfDistrict_nn</div>
<table>
...
<tr>        
<td class="lewa">No. of procedures</td>        
<td class="prawa"><span id="ContentPlaceHolder1_lblbw">850</span>
</td>
...
</table>

我不需要抓取整个 tables(如果可以的话就好了)我只需要它们中的一两个值,所以我尝试使用 Selector Gadget 检查页面。我感兴趣的值之一是节点中存在的过程数 #ContentPlaceHolder1_lblbw 并且前面有一个标题,即 .tytul class.

mydata <- read_html(....)  %>%  html_nodes(name, "#ContentPlaceHolder1_lblbw") %>%  
  html_text()

但是这个占位符在每个地区都会重复。然后我需要阅读 table 上方标题后的第一个这样的占位符。并记录每个标题和后面的table。

如何将这样的 table 抓取到数据框

    District            No. of procedures
    NameOfDistrict_01   950
    NameOfDistrict_02   350
............................
    NameOfDistrict_nn   850

我认为这符合您的要求。

library(rvest)
page <- read_html("https://prog.nfz.gov.pl/app-jgp/GrupaSzczegoly.aspx?id=2AfRAM1JYDoYzktSMvdOhFiPm2Fnh67q",encoding=-"utf-8")
data <- page %>% html_nodes(xpath='//*[@id="ContentPlaceHolder1_lblbp"]') %>% html_text()
titles <- page %>% html_nodes(xpath='//*[@class="tytul"]') %>% html_text()

myData <- data.frame(title=titles,data=as.numeric(data))

head(myData)
                   title data
1       01 - DOLNOSLASKI  919
2 02 - KUJAWSKO-POMORSKI  984
3          03 - LUBELSKI 1476
4           04 - LUBUSKI  255
5            05 - LÓDZKI 1225
6        06 - MALOPOLSKI 1780