Hier ist etwas. Es ist ein ziemliches Durcheinander:
xp = paste0('//li[@class="tbl-cupname"]/',
'div[@class="label-data"]/',
'span[@class="text"][text()="FIFA World Cup™"]/../../',
'following-sibling::li[@class="tbl-appearances"]/',
'div[@class="label-data"]/',
'span[@class="text"]')
fifadata %>% html_nodes(xpath = xp) %>% html_text %>% as.integer
# [1] 20
Lassen Sie uns die Logik durchbrechen.
Die naive Abfrage:
fifadata %>% html_nodes(
xpath = '//li[@class="tbl-appearances"]/div[@class="label-data"]/span'
)
Ist ausreichend, um uns die vier Reihen, die Anzahl der Auftritte in jeder der vier Turniere geben auf dieser Seite aufgelistet. Wenn die Webdesigner barmherzig sind, ist dies ausreichend - wählen Sie einfach die erste von jeder Seite aus, die Sie scrappen möchten, und Sie werden haben, wonach Sie suchen.
Dies ist jedoch nicht robust - es liefert falsche Ergebnisse, wenn sich die Zeilenreihenfolge ändert oder wenn die gewünschte Zeile fehlt.
Die gestellte Abfrage erledigt dies.
Zuerst identifizieren wir die Reihen, die mit der FIFA Fussball-Weltmeisterschaft zusammenhängen. Die wesentliche Struktur gibt es:
<li class="tbl-cupname">
<div class="label-data">
<span class="text"> n_appearances </span>
</div>
</li>
Wir verwenden die class
Attribute, da es andere li
und div
in der Nähe, dass wir ausschließen sicher sein wollen. So können wir die vier Reihen entsprechend den Turnieren (Fußball-Weltmeisterschaft, FIFA Konföderationen-Pokal, die FIFA Frauen-WM und Olympischen Fussballturnier der Frauen) wählen mit:
fifadata %>% html_nodes(xpath = '//li[@class="tbl-cupname"]')
Beseitigung der drei Turniere, die nicht relevant sind, um Ihre Verfolgung erfordert eine Bedingung auf dem <span>
Element, daher auch der Rest des ersten Teils:
xp_part_1 = paste0('//li[@class="tbl-cupname"]/',
'div[@class="label-data"]/',
'span[@class="text"][text()="FIFA World Cup™"]')
fifadata %>% html_nodes(xpath = xp_part_1)
das das Turnier wählt, wollen wir aber die nachfolgendenli
die die Nummer enthält des Aussehens. Die Kernstruktur wir berühren hier:
<li class="tbl-cupname"> </li>
<li class="tbl-appearances"> </li>
Teil 1 von der XPath uns nach unten zwei Ebenen unterhalb dieser li
jedoch navigiert hat, so müssen wir „aufsteigen“, die Knoten mit ..
(dies ist genau wie cd ..
im Linux-Terminal, um ein Niveau zu steigen, so hoffentlich erinnert das).
Wir verwenden dann die following-sibling
Syntax, um Knoten auszuwählen, die auf der gleichen Ebene wie der aktuelle Knoten sind, aber später kommen.
Sobald wir wieder auf der gleichen Ebene wie die li
Benennung des Turniers sind, können wir mit der "naiven" Abfrage weitermachen, um die Anzahl der Erscheinungen zu untersuchen.
Sie versuchen also, den Teil zu extrahieren, in dem Brasilien 2014, Südafrika 2010 aufgeführt ist? – amrrs
Ja, die Gewinne von jedem Turnier zurück bis 1986. – David