使用 R Studio 从 google 学者中提取 DOI 列表的引用次数

Pull out the number of citations of a list of DOIs from google scholar using R Studio

我正在 R Studio 中开发一个小程序,它应该能够从 google 学者的特定科学论文中提取 DOI 列表的引用次数。到目前为止,我的代码看起来像这样(我使用了一个测试 DOI 向量,我的真实向量包含大约 450 个 DOI)。

library(tibble)
library(dplyr)
library(rvest)
library(purrr)
library(xml2)
library(XML)
library(gsubfn)
library(proto)
library(readxl)

test.doi <- c("10.1111/j.1749-5687.2011.00133.x", "10.2307/20159610", "10.1111/j.1467-954X.2001.tb03531.x")

html_test.doi.list <- list()

for (i in test.doi){
  urli <- paste0("https://scholar.google.de/scholar?hl=de&as_sdt=0%2C5&q=", i, "&btnG=")
  html_test.doi.list[[i]] <- read_html(urli)
}

citnum <- html_test.doi.list %>%
  map(.f=function(x){
    html_nodes(x, xpath='/html/body/div/div[11]/div[2]/div[2]/div[2]/div[1]/div/div[3]/a[3]') %>%
      html_text()
  })

citnum2 <- html_test.doi.list %>%
  map(.f=function(x){
    html_nodes(x, xpath='/html/body/div/div[11]/div[2]/div[2]/div[2]/div[1]/div/div[2]/a[3]') %>%
      html_text()
  })


citnum <- replace(citnum, citnum=="character(0)", 99999)
citnum2 <- replace(citnum2, citnum2=="character(0)", 99999)

citnumclear <- gsub("\D","",citnum)
citnum2clear <- gsub("\D","",citnum2)

cit.table <- cbind(test.doi, citnumclear, citnum2clear)
View(cit.table) 

主要问题是从 HTML-Code 中获取正确部分的部分,因为引用次数似乎没有出现在同一位置。我试图通过采用不同的 xpath 来提高获取信息的机会(在我的示例中为 citnum + citnum2)来避免该问题。但我认为这不是最好的方法。也许你们中的一些人可能有什么想法?

我对您的 'citnum <- ...' 块做了一些更改,这似乎在起作用。

citnum <- html_test.doi.list %>%
 map(.f=function(x){
  html_nodes(x, "a") %>%
  html_text() %>%
  .[grep("Zitiert von:", .)] %>%
  gsub("Zitiert von: ", "", .) %>%
  as.numeric() %>%
  .[1] # selecting citation count only for first result
  })

这里的想法不是依赖于精确的 xpath 或 CSS-Selector,而是使用出现在每个结果引用计数旁边的重复字符串 "Zitiert von:"。首先上面的代码 selects 在结果页面中的所有链接。 grep() 仅用于 select 那些包含字符串 "Zitiert von:" 的链接。然后形成一个数值,只有第一个条目是 selected。最后一步可能不是你要找的,改成你喜欢的。