我正试图在Wikidata页面上搜索整个"更多语言"表,例如https://www.wikidata.org/wiki/Q3044

我在R中try 了两种方法:

library(rvest)
url <- "https://www.wikidata.org/wiki/Q3044"
pg <- url %>% read_html

pg <- pg %>% 
  html_nodes(".wikibase-entitytermsforlanguagelistview") %>%
  html_table()

table <- pg[[1]]

但这只返回英文部分(1行).

我也try 过:

library(tidywikidatar)
tw_get_label(id = c("Q3044"),language = "nl")

但这只返回一个标签.然而,我希望Wikidata上的所有"也称为"类别.

任何帮助都将不胜感激!

推荐答案

多好的问题啊.您只获得表的第一行,因为这是页面最初加载的全部内容,并且在后台发生了一些JavaScript魔术,可以在页面加载后加载表的其余部分.如果你重新加载页面并仔细观察,你就会看到这种情况——我在下面添加了一个gif来显示这一点.因为R没有运行所有这些额外的魔法,所以它得到的只是原始页面.

Gif showing page refresh with only the first row initially loaded

然而,所有这一切意味着我们需要寻找一个不同的URL来获取整个表.使用Chrome的开发工具,我们了解到该表来自https://www.wikidata.org/wiki/Special:EntityData/Q3044.json,这是我们真正想要刮取的页面.如果我们用jsonLite下载它,我们不能得到准确的表格,但我们可以用dplyr个工具重新组装它.下面是一段代码:


wiki_data <- jsonlite::read_json("https://www.wikidata.org/wiki/Special:EntityData/Q3044.json")
table_data <- wiki_data$entities$Q3044

library(dplyr)
label_col <- bind_rows(table_data$labels) %>% rename(label=value)
desc_col <- bind_rows(table_data$descriptions) %>% rename(description=value)
alias_col <- bind_rows(table_data$aliases) %>% 
  rename(alias=value) %>%
  group_by(language) %>%
  summarise(alias=paste(alias, collapse = ", "))

full_table <- label_col %>%
  left_join(desc_col) %>%
  left_join(alias_col)

输出的前几行如下所示:

> full_table
# A tibble: 157 x 4
   language label                         description                                        alias
   <chr>    <chr>                         <chr>                                              <chr>
 1 fr       Charlemagne                   empereur d'Occident et roi des Francs              Char~
 2 en       Charlemagne                   King of the Franks, King of Italy, and Holy Roman~ Karo~
 3 it       Carlo Magno                   re dei Franchi e dei Longobardi e primo imperator~ NA   
 4 ilo      Karlomagno                    Ari dagiti Pranko ken Lombardo ken Emperador ti N~ NA   

R相关问答推荐

从cv.glmnet R包中查找培训SSE

想要创建一个可以存储四个多元正态总体的多元偏度的载体

将虚线添加到每个站点的传奇中平均

分组时间连续值

DT::可数据的正规表达OR运算符问题

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

如何删除R中除某些特定名称外的所有字符串?

R箱形图gplot 2 4组但6个参数

隐藏e_mark_line的工具提示

如何在kableextra调用cell_spec()中忽略NA?

将文件保存到新文件夹时,切换r设置以不必创建目录

使用列/行匹配将两个不同维度的矩阵相加

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

如何在R forestplot中为多条垂直线分配唯一的 colored颜色 ?

如何将R中数据帧中的任何Nas替换为最后4个值

TreeNode打印 twig 并为其上色

有没有办法一次粘贴所有列

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?