r - 使用 R 或 Python 按年份检索 google scholar 的搜索结果数?

我不知道如何开始,所以我没有尝试过的代码,我很抱歉......有没有办法通过数字序列(年份)循环以下 url:

https://scholar.google.com/scholar?hl=en&as_sdt=0%2C22&as_ylo=2021&q=%22TERM1%22+AND+%22TERM2%22&btnG=

哪里 2021 被一个序列替换,只得到简单数量的搜索结果?

太感谢了!

编辑:

这适用于 Google 搜索,但不适用于 Google Scholar...生成一个空集。

ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
url <- "https://scholar.google.com/scholar?hl=en&as_sdt=0%2C22&as_ylo=2021&q=%22causal+inference%22+AND+%22statistics%22&btnG="
doc <- htmlTreeParse(getURL(url, httpheader = list(`User-Agent` = ua)), useInternalNodes = TRUE)

nodes <- getNodeSet(doc, "//div[@id='result-stats']")
nodes

回答1

搜索栏下方有一个近似的结果计数。很多属性 values 看起来是动态的,所以我会寻找更稳定的元素和属性之间的关系(基于经验)。在这种情况下,我会使用 :contains() 在 div 中查找带有“结果”的文本。我将通过一个 css 选择器列表来锚定这个 div,该列表引用相对于搜索栏和其间元素的预期 div 位置。

library(rvest)
library(httr)

headers = c("User-Agent" = "Safari/537.36")
r <- httr::GET(url = "https://scholar.google.com/scholar?hl=en&as_sdt=0%2C22&as_ylo=2021&q=%22TERM1%22+AND+%22TERM2%22&btnG=", 
               httr::add_headers(.headers=headers))
r |> content() |> html_element('form[method=post] + div div > div:contains("results")') |> html_text()

然后,您也许可以使用简单的正则表达式来提取结果计数,例如

library(stringr)

r |>
  content() |>
  html_element('form[method=post] + div div > div:contains("results")') |>
  html_text() |>
  str_extract("(\\d+)") |>
  as.integer()

相似文章

最新文章