Я хочу использовать R, чтобы очистить ссылки, содержащиеся в дереве категорий Викимедиа, и структуру дерева из здесь . Приведенный ниже код может раскрыть все складные точки пули
library(RSelenium)
rD <- rsDriver(check = FALSE)
remDr <- rD[["client"]]
remDr$navigate("https://commons.wikimedia.org/wiki/Category:Sports")
n <- 1
# n <- 10 # takes a long time to expand all bullet points
for(i in 1:n){
b <- remDr$findElements(using = "css selector", "[title='expand']")
for(i in 1:length(b)){
b[[i]]$clickElement()
}
}
... но я изо всех сил пытаюсь создать базу данных, которая выглядела бы как ...
Я могу получить hlef и имена маркеров, используя приведенный ниже код, но я изо всех сил пытаюсь найти способ указать, к какому уровню относится каждый пункт маркера (т. Е. Как глубоко в дереве категорий каждая пуля) Дело в том) Я думаю, что может быть умный метод xpath для подсчета глубины CategoryTreeChildren
каждой пули, но это выходит далеко за пределы моих возможностей.
# for testing I manually expand the bullets for the first couple of branches
# (fully for Bulgaria women badminton, basketball) and the last possible
# branch rather than let the for loop run and run through multiple cycles.
library(tidyverse)
library(rvest)
s <- remDr$getPageSource()
d <- read_html(s[[1]]) %>%
html_nodes("div#mw-subcategories") %>%
html_nodes("div.CategoryTreeItem") %>%
html_nodes("a") %>%
map(xml_attrs) %>%
map_df(~as.list(.)) %>%
as_tibble()
# > d
# # A tibble: 135 x 2
# href title
# <chr> <chr>
# 1 /wiki/Category:Categories_by_sport Category:Categories by sport
# 2 /wiki/Category:Categories_by_sport_by_c~ Category:Categories by sport by co~
# 3 /wiki/Category:Categories_of_Bulgaria_b~ Category:Categories of Bulgaria by~
# 4 /wiki/Category:Female_sportspeople_from~ Category:Female sportspeople from ~
# 5 /wiki/Category:Female_badminton_players~ Category:Female badminton players ~
# 6 /wiki/Category:Maria_Delcheva Category:Maria Delcheva
# 7 /wiki/Category:Petya_Nedelcheva Category:Petya Nedelcheva
# 8 /wiki/Category:Gabriela_Stoeva Category:Gabriela Stoeva
# 9 /wiki/Category:Stefani_Stoeva Category:Stefani Stoeva
# 10 /wiki/Category:Women%27s_basketball_pla~ Category:Women's basketball player~
Я также поиграл с пакетом WikipediR - в описании пакета говорится, что его можно использовать для получения элементов деревьев категорий, но я не могу найти пример того, как реализовать его.