如何用R从Uniprot网页提取以Tc00开头的字符串?
解决方案:从UniProt提取Tc00开头字符串
问题根源
UniProt当前页面依赖动态JavaScript渲染,rvest的read_html()只能抓取静态HTML,因此返回的是JS禁用时的 fallback提示,无法获取实际页面内容。
方法1:调用UniProt官方API(推荐)
直接使用UniProt的REST API获取数据,无需处理动态渲染,效率更高且稳定。
library(httr) library(stringr) # 指定目标UniProt ID uniprot_id <- "Q4DQV8" # 构造纯文本格式的API请求链接 api_url <- paste0("https://rest.uniprot.org/uniprotkb/", uniprot_id, ".txt") # 发送请求并获取内容 response <- GET(api_url) raw_content <- content(response, as = "text") # 提取以Tc00开头的字符串 target_string <- str_extract(raw_content, "Tc00\\S*") print(target_string)
方法2:用RSelenium模拟浏览器加载
如果必须从前端页面抓取,需要模拟真实浏览器加载动态内容:
library(RSelenium) library(rvest) library(stringr) # 启动Chrome驱动(需确保ChromeDriver与本地Chrome版本匹配) driver <- rsDriver(browser = "chrome", port = 4567L, chromever = "latest") browser_client <- driver[["client"]] # 访问目标页面 browser_client$navigate("http://www.uniprot.org/uniprot/Q4DQV8") # 获取渲染后的页面源码 page_source <- browser_client$getPageSource()[[1]] parsed_page <- read_html(page_source) # 提取文本并匹配目标字符串 page_text <- parsed_page %>% html_text() target_string <- str_extract(page_text, "Tc00\\S*") print(target_string) # 清理资源 browser_client$close() driver[["server"]]$stop()
注意:使用RSelenium前需安装对应浏览器的驱动(如ChromeDriver),并保证驱动版本与浏览器版本一致。
内容的提问来源于stack exchange,提问作者Honorato
相关产品推荐
相关产品推荐

