我正在研究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)。但我不认为这是最好的方式。也许你们中的一些人可能有任何想法?
答案 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:”的链接。形成数字值,仅选择第一个条目。最后一步可能不是你想要的,根据自己的喜好改变它。