You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RSelenium嵌套节点数据提取:Google Scholar PDF链接获取问题

解决Google Scholar爬取PDF链接行数不匹配的问题

核心问题在于直接提取所有.gs_or_ggsm a节点会得到所有PDF链接,但每篇文献的PDF数量不一致,导致结果行数和文献总数不匹配。正确做法是按单篇文献的容器节点逐个处理,对每篇文献单独提取第一个有效PDF链接:

修改后的PDF提取逻辑

在extract_data函数中,替换原PDF提取代码为以下内容:

# 定位每一篇文献的独立容器节点
gs_items <- page %>% html_nodes(".gs_or")

# 遍历每个容器,提取第一个有效PDF链接
PDFs <- map_chr(gs_items, function(item) {
  # 提取当前文献下的所有PDF链接候选
  links <- item %>% html_nodes(".gs_or_ggsm a") %>% html_attr("href")
  # 过滤出有效的外部PDF链接(排除Google Scholar内部跳转链接)
  valid_links <- links[startsWith(links, "https://") & !startsWith(links, "/scholar?")]
  # 返回第一个有效链接,无则返回NA
  if(length(valid_links) > 0) valid_links[1] else NA_character_
})

完整修改后的extract_data函数

extract_data <- function(page_source) {
  page <- read_html(page_source)
  titles <- page %>% html_nodes(".gs_rt") %>% html_text()
  authors <- page %>% html_nodes(".gs_a") %>% html_text()
  years <- str_extract(authors, "\\d{4}")
  authors <- str_replace(authors, "\\d{4}", "")
  urls <- page %>% html_nodes(".gs_rt a") %>% html_attr("href")

  # 新增的PDF提取逻辑
  gs_items <- page %>% html_nodes(".gs_or")
  PDFs <- map_chr(gs_items, function(item) {
    links <- item %>% html_nodes(".gs_or_ggsm a") %>% html_attr("href")
    valid_links <- links[startsWith(links, "https://") & !startsWith(links, "/scholar?")]
    if(length(valid_links) > 0) valid_links[1] else NA_character_
  })

  data.frame(Title_name = titles, 
             Author_Names = authors, 
             Year_Publication = years, 
             Title_URL = urls,
             PDF_Link = PDFs)
}

逻辑说明

  • 通过.gs_or定位每篇文献的独立容器,确保遍历次数和文献数量完全一致
  • 对每个容器内部的PDF链接单独过滤、提取,只保留第一个符合要求的外部链接
  • 无有效链接时自动填充NA,最终PDFs向量的长度和titles、authors等字段完全匹配,解决行数不一致问题

内容的提问来源于stack exchange,提问作者Camilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:57:53