выскабливание деревьев категории Викимедиа - PullRequest
1 голос
/ 16 апреля 2020

Я хочу использовать 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()
  }
}

... но я изо всех сил пытаюсь создать базу данных, которая выглядела бы как ...

enter image description here

Я могу получить 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 - в описании пакета говорится, что его можно использовать для получения элементов деревьев категорий, но я не могу найти пример того, как реализовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...