Web Scraping:如何自动展开MEDDRA页面隐藏子列表获取编码?
解决MEDDRA编码自动抓取的问题
以下是几种可行的解决方案:
方法一:用RSelenium模拟浏览器交互
rvest仅能处理静态HTML,动态展开的内容需要模拟用户点击操作,RSelenium可直接控制浏览器完成流程:
library(RSelenium) library(rvest) # 启动Chrome浏览器(需提前配置对应版本的ChromeDriver) driver <- rsDriver(browser = "chrome") remDr <- driver[["client"]] # 访问目标页面 remDr$navigate("https://bioportal.bioontology.org/ontologies/MEDDRA?p=classes&conceptid=10040786") # 定位展开按钮并点击(替换为实际页面的元素选择器,如css或xpath) expand_btn <- remDr$findElement(using = "css selector", value = ".expand-button-class") expand_btn$clickElement() # 等待内容加载完成 Sys.sleep(2) # 获取加载后的页面源码并解析 page_source <- remDr$getPageSource()[[1]] page <- read_html(page_source) meddra_codes <- page %>% html_elements(".code-selector") %>% html_text() # 清理资源 remDr$close() driver$server$stop()
方法二:构造合法的XHR请求
你看到的_=1667913401293参数是毫秒级Unix时间戳,用于防止缓存,生成逻辑为当前时间秒数乘以1000。直接构造请求即可获取展开后的内容:
library(httr) library(rvest) # 生成毫秒级时间戳 timestamp <- as.character(as.integer(Sys.time()) * 1000) # 替换为抓包得到的实际XHR接口地址 api_url <- paste0("https://bioportal.bioontology.org/xxx/xxx?_=", timestamp) # 发送请求,带上必要请求头模拟浏览器访问 response <- GET(api_url, add_headers( "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", "Referer" = "https://bioportal.bioontology.org/ontologies/MEDDRA?p=classes&conceptid=10040786" )) # 解析返回内容(根据实际格式调整,可能是JSON或HTML) content <- content(response, as = "text") page <- read_html(content) meddra_codes <- page %>% html_elements(".code-selector") %>% html_text()
方法三:直接使用MEDDRA结构化数据集
若使用许可允许,直接下载MEDDRA官方提供的结构化数据文件(如CSV、XML格式),这种方式比网页抓取更稳定,无需处理动态页面问题,但需遵守MEDDRA的使用协议。
内容的提问来源于stack exchange,提问作者denis
相关产品推荐
相关产品推荐

