使用R Studio从谷歌学者中拉出DOI列表的引用次数

时间:2018-02-02 21:50:44

标签: r rstudio rvest citations google-scholar

我正在研究R Studio中的一个小程序,该程序应该能够从谷歌学者的特定科学论文中提取出一系列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代码中获取正确的部分,因为引用的数量似乎并未出现在同一位置。我试图通过采用不同的xpath来避免问题,从而获得更高的获取信息的机会(在我的例子中为citnum + citnum2)。但我不认为这是最好的方式。也许你们中的一些人可能有任何想法?

1 个答案:

答案 0 :(得分:0)

我对你的'citnum&lt; - ...'块做了一些改动,似乎正在做这个工作。

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:”,它出现在每个结果引用计数旁边。首先,上面的代码选择结果页面中的所有链接。 grep()用于仅选择包含字符串“Zitiert von:”的链接。形成数字值,仅选择第一个条目。最后一步可能不是你想要的,根据自己的喜好改变它。