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
我想抓取这个 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