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

时间:2017-04-27 12:10:43

标签: r web-scraping rvest rselenium

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

它列出了每个地区的医疗程序统计数据,html具有结构:标题和相应表格,为全国所有地区的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>

我不需要刮掉整个表格(如果可以的话我会很好)我​​只需要一个或两个值,所以我试着用Selector Gadget查看页面。我感兴趣的一个值是节点#ContentPlaceHolder1_lblbw 中存在的过程数量,并且前面是标题,即 .tytul 类。

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

但是这个占位符会针对每个区域重复。然后我需要在表格上方的标题之后阅读第一个这样的占位符。并记录下面的每个标题和表格。

如何将此表刮到数据框

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

1 个答案:

答案 0 :(得分:5)

我认为这可以满足您的需求。

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