0

我正在 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)来避免该问题。但我不认为这是最好的方法。也许你们中的一些人可能有任何想法?

4

1 回答 1

0

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

于 2018-02-04T17:56:58.003 回答