2017-04-27 4 views
1

würde Ich mag die diese URL kratzen: https://prog.nfz.gov.pl/app-jgp/GrupaSzczegoly.aspx?id=2AfRAM1JYDoYzktSMvdOhFiPm2Fnh67qrvest: Schaben mehrere Tabellen mit vorhergehenden Titel

Es listet Statistiken von medizinischen Verfahren in den einzelnen Regionen und html hat die Struktur: Titel und die entsprechende Tabelle, 16mal für alle Regionen des Landes.

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

Ich brauche nicht die ganzen Tabellen zu kratzen (es wäre schön, wenn ich könnte) ich nur noch einen oder zwei Werte von ihnen so habe ich versucht, mit Selector Gadget suchen Inspiziere die Seite. Einer der Werte, an denen ich interessiert bin, ist die Anzahl von Prozeduren, die in einem Knoten # ContentPlaceHolder1_lblbw vorhanden sind und der ein Titel vorausgeht, d. H. .tytul Klasse.

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

Aber dieser Platzhalter wird für jede Region wiederholt. Ich muss dann den ersten solchen Platzhalter nach dem Titel über dem Tisch lesen. Und notiere jeden Titel und die folgende Tabelle.

Wie solche Tabelle in die Datenrahmen

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

Antwort

4

Ich denke, das tut, was Sie suchen kratzen.

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 
+0

So einfach? Ich dachte, eine oder zwei Schleifen wären notwendig. Vielen Dank. –