如何用R获取Scopus数据库中期刊的最高百分位数值(含年度数据)
如何用R获取Scopus数据库中期刊的最高百分位数值(含年度数据)
嘿,我懂你想抓取Scopus所有期刊最高百分位数值(最好能拿到年度更新数据)的需求,而且你已经尝试用rvest但没成功,还发现官方API没法获取这个数据——这确实挺头疼的。
先说说你之前rvest代码没得到想要结果的原因:你抓取的那个表格其实只是页面上的CiteScore更新说明,根本不是期刊的百分位数据表格!你看返回的内容都是关于CiteScore计算频率的信息,和期刊数据完全不沾边。而且Scopus的期刊列表是动态加载的,静态的read_html根本拿不到完整的期刊数据内容。
下面给你几个可行的方案:
方案1:利用Scopus官方导出功能(最稳妥)
既然API走不通,Scopus本身支持批量导出期刊数据。你可以手动操作:
- 打开Scopus的期刊来源页面,根据需求筛选期刊(比如选择对应年份的百分位数据)
- 找到导出选项,选择导出为CSV格式
- 然后在R里用
read.csv()或者readr::read_csv()读取这个文件就行
如果需要年度数据,你可以每年重复这个操作,或者在筛选时切换年份后分别导出。这个方法完全符合Scopus的使用条款,不会有被封禁的风险。
方案2:用RSelenium处理动态加载(适合自动化)
如果想自动化抓取,就得用能模拟浏览器的工具,比如RSelenium,因为Scopus的内容是动态渲染的,需要模拟滚动、甚至登录(如果你的访问需要机构账号)才能获取完整数据。
简单示例代码(前提是你已经安装了RSelenium和对应浏览器的驱动,比如ChromeDriver):
library(RSelenium) library(rvest) library(dplyr) # 启动浏览器驱动 driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver$client # 打开Scopus来源页面 remDr$navigate("https://www.scopus.com/sources.uri") # 这里需要根据实际情况添加操作:比如登录(如果需要)、滚动加载所有期刊、找到数据表格 # 注意:Scopus可能有反爬机制,操作不要太频繁 # 等待页面加载完成(可以根据实际情况调整等待时间) Sys.sleep(5) # 获取页面源码 page_source <- remDr$getPageSource()[[1]] site <- read_html(page_source) # 尝试抓取期刊数据表格(注意选择正确的CSS/XPath节点,实际节点需要你自己检查页面) journal_data <- site %>% html_node("table#some-journal-table-id") %>% html_table() # 关闭浏览器 remDr$close() driver$server$stop()
重要提醒
- 一定要遵守Scopus的使用条款,不要高频次爬取,避免IP被封禁
- 如果是机构订阅用户,确保你的账号有权限访问所有需要的期刊数据
- 动态页面的节点可能会随时变化,需要你自己用浏览器的开发者工具检查最新的CSS或XPath选择器
备注:内容来源于stack exchange,提问作者Bruno Mioto
相关产品推荐
相关产品推荐

