/
jak_wczytywac_tabele_z_formatu_html.Rmd
71 lines (49 loc) · 2.65 KB
/
jak_wczytywac_tabele_z_formatu_html.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Jak wczytywać tabele z formatu HTML?
Bardzo często, dane które chcemy wczytać do R są dostępne w postaci tabeli na stronie HTML.
Takie dane można odczytać na różne sposoby. Poniżej przedstawimy dwa najczęstsze.
## Poprawnie sformatowana tabela HTML
Jeżeli tabela HTML jest poprawnie sformatowana, to najwygodniej jest wykorzystać funkcję `readHTMLTable` z pakietu `XML`. Wczytuje ona całą stronę internetową do R, następnie ją analizuje tak by wyłuskać z niej tabele. Wynikiem działania tej funkcji jest lista z tabelami znalezionymi na stronie.
Prześledźmy działanie tej funkcji na przykładzie czytania danych z strony Wikipedii, ze strony o liście meczów reprezentacji Polski w piłce nożnej
https://pl.wikipedia.org/wiki/Lista_mecz%C3%B3w_reprezentacji_Polski_w_pi%C5%82ce_no%C5%BCnej.
Stronę HTML odczytujemy i pobieramy funkcją `getURL()`. Na tej przykłądowej stronie znajduje się wiele tabel. Funkcja `readHTMLTable` wczyta je wszystkie a jako wynik zwróci listę tabel.
```{r}
library(XML)
library(RCurl)
link <- "https://pl.wikipedia.org/wiki/Lista_mecz%C3%B3w_reprezentacji_Polski_w_pi%C5%82ce_no%C5%BCnej"
xData <- getURL(link)
tabele <- readHTMLTable(xData, stringsAsFactors = FALSE)
length(tabele)
```
Wszystkich tabel jest `r length(tabele)`.
Pierwsza z nich to tabela ze statystykami meczów.
```{r}
statystyki <- tabele[[1]]
head(statystyki)
```
## Skubanie strony HTML
Jeżeli dane nie są w poprawnej tabeli HTML, ale są formatowane np. jako elementy `div`, to alternatywny sposób pobierania danych polega na wczytaniu całej strony HTML a następnie wyrażeniami regularnymi wydzieraniu poszczególnych elementów strony.
W poniższym przykładzie to skubanie jest rozłożone na kilka etapów. Najpierw odczytujemy treść strony internetowej.
```{r}
link <- "https://pl.wikipedia.org/wiki/Lista_mecz%C3%B3w_reprezentacji_Polski_w_pi%C5%82ce_no%C5%BCnej"
html <- readLines(link)
html <- paste(html, collapse="")
```
Następnie wyrażeniem regularnym wycinamy fragment z interesującą nas tabelą.
```{r}
tmp1 <- strsplit(html, split="Lata 2001–2010")[[1]][5]
tabelaZeStatystykami <- strsplit(tmp1, split="Uwagi")[[1]][1]
```
Tabele dzielimy na wiersze (znaczniki tr) a wiersze na komórki (znaczniki td)
```{r}
tmp3 <- strsplit(tabelaZeStatystykami, split="<tr>")[[1]]
komorki <- strsplit(tmp3, split="<.?td>")
```
Następnie z każdego wiersza wyłuskujemy wartości z 7 kolumny, czyli wynik meczu.
```{r}
mecze <- sapply(komorki, function(x) x[14])
mecze <- gsub(mecze, pattern=" .*$", replacement="")
```
I tak po kilku krokach możemy wykonywać kolejne analizy na tak wyłuskanych statystykach.
```{r}
table(mecze)
```