Lieber Kai, der Code war leider nicht wirklich kommentiert, deshalb hier eine kurze Erklärung, was wo passiert

library(rvest) 
library(dplyr)
library(readr)

Das Paket rvest ermöglicht ein einfaches Web-Scraping im Tidy-Format. Zur Unterstützung nutze ich hier das Chrome-Addon Selector Gadget. Ich habe hier auch mal ein Tutorial geschrieben, wie man mit rvest sehr einfach Daten von Abgeordneten (MEPs) abgreifen kann – in dem Fall waren es Social-Media-Daten. Link zum Tutorial

An der TU-München habe ich im Januar einen Vortrag zu advanced web scraping gehalten – in der ersten Hälfte des Vortrags habe ich eine kurze Einleitung zu rvest gegeben. Link zur Präsentation

Das Packet dplyr erlaubt eine umfassende und einfache Manipulation von Dataframes. Funktionen wie count, group_by, filter und summarise erlauben mir hier sehr einfach das anschließende Zählen der unterschiedlichen Variablen.

page <- read_html("http://www.ilo.org/dyn/natlex/natlex4.listResults?p_lang=en&p_country=DEU&p_show_abstract=N&p_pagelength=2000")

Über die Funktion read_html aus rvest kann ich die Seite einfach in eine Variable laden. Die URL habe ich ein wenig angepasst, sodass mir auf einer Seite 2000 Ergebnisse angezeigt werden. Die Anpassung habe ich über einen einfachen Klick auf die zweite Seite entdeckt – dort wird die URL schon entsprechend formatiert.

summary_df <- tibble(
  title = page %>% html_nodes(".titleList > a") %>% html_text(),
  adoption_date = page %>% html_nodes(".dateList em+ strong") %>% html_text(),
  document_type = page %>% html_nodes(".type") %>% html_text()
)

Anschließend extrahiere ich die Informationen aus der Variable page mit html_nodes die entsprechenden Informationen. Ich habe auf der Seite entdeckt, das unter den Titles auch angaben über den Typ des Documents zu finden sind. Hier auf dem Screenshot entsprechend gelb markiert:

Ich musste deshalb nicht mit einer Erkennung von strings im Titel arbeiten, sondern konnte aus diesen drei Variablen gleich einen Dataframe bauen, welchen ich später auch einfach als csv exportieren konnte. Die Funktion tibble ist hier nur ein besonderer Dataframe, welche beim tidy-Ansatz häufig verwendet wird. Sie hat kein Problem mit encoding (insbeondere UTF-8 und Emojis) und wird in der Konsole besser dargestellt, ist hier aber einfach nur aus gewohnheit genutzt.

Die Funkion html_nodes nutzt standardmäßig CSS-Selectors. Anhand von CSS-Formating kann man hier entsprechende Daten extrahieren. Zur Auswahl der korrekten CSS-Formatings kann ich das Selector Gadget sehr ans Herz legen.

summary_df %>% 
  count(document_type)

Mit dplyr kann ich nun sehr einfach die unterschiedlichen Ausprägungen von document_type zählen. Die count funktion ist hier nichts anderes als eine zusammengefasste Funktion aus group_by und summarise. Ich kann die Ergebnisse auch noch sortieren:

summary_df %>% 
  count(document_type) %>%
  arrange(-n)

Das ganze muss ich nun nur noch abspeichern. Ich könnte hier die Fun