伦特雷斯包
rentrez
根据本手册,我在 Linux(Ubuntu 20.04.2)的实验室计算机上发现了 RStudio(版本 1.1.442)中的包。但是,后来当我想在 Windows 8 Pro (RStudio 2021.09.0) 的笔记本电脑上运行相同的代码时
library (rentrez)
entrez_dbs()
entrez_db_searchable("gene")
#res <- entrez_search (db = "gene", term = "(Vibrio[Organism] OR vibrio[All Fields]) AND (16s[All Fields]) AND (rna[All Fields]) AND (owensii[All Fields] OR navarrensis[All Fields])", retmax = 500, use_history = TRUE)
rentrez
即使关闭会话或重新安装软件包,我也无法摆脱此错误
curl::curl_fetch_memory(url, handle = handle) : schannel: next InitializeSecurityContext failed: SEC_E_ILLEGAL_MESSAGE (0x80090326) 中的错误 - 此错误通常发生在收到致命 SSL/TLS 警报时(例如握手失败)。
这是我面临的主要问题。
RS硒包
后来我决定以FASTA 格式修改包含有关基因及其序列的详细信息的页面,修改我以前使用的代码。它使用和包装,结果很完美。rvest
rselenium
# Specifying a webpage
url <- "https://www.ncbi.nlm.nih.gov/gene/66940694" # the last 9 numbers is gene id
library(rvest)
library(RSelenium)
# Opening a browser
driver <- rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
remDr$errorDetails
remDr$navigate(url)
# Clicked outside in an empty space next to the FASTA button and copied a full xPath (redirecting to a FASTA data containing webpage)
remDr$findElement(using = "xpath", value = '/html/body/div[1]/div[1]/form/div[1]/div[5]/div/div[6]/div[2]/div[3]/div/div/div[3]/div/p/a[2]')$clickElement()
webElem <- remDr$findElement("css", "body")
#scrolling to the end of a webpage: left it from the old code for the case of a long gene
for (i in 1:5){
Sys.sleep(2)
webElem$sendKeysToElement(list(key = "end"))
# Let's get gene FASTA, for example
page <- read_html(remDr$getPageSource()[[1]])
fasta <- page %>%
html_nodes('pre') %>%
html_text()
print(fasta)
输出:">NZ_QKKR01000022.1:c3037-151 副霍乱弧菌菌株 2016V-1111 2016V-1111_ori_contig_18,全基因组鸟枪法序列\nGGT...
该代码可以很好地获取有关基因的其他详细信息,例如其登录号、位置、生物体等。
循环处理多个基因 ID
后来我尝试更改代码,以按照我在这里为我的另一个项目得到的解释同时获取多个基因 ID 的相同信息。
# Specifying a list of gene IDs
res_id <- c('57838769','61919208','66940694')
dt <- res_id # <lapply> looping function refused to work if an argument had a different name rather than <dt>
driver <- rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
## Writing a function of GET_FASTA dependent on GENE_ID (x)
get_fasta <- function(x){
link = paste0('https://www.ncbi.nlm.nih.gov/gene/',x)
remDr$navigate(link)
remDr$findElement(using = "xpath", value = '/html/body/div[1]/div[1]/form/div[1]/div[5]/div/div[6]/div[2]/div[3]/div/div/div[3]/div/p/a[2]')$clickElement()
...下面有一个续集,但是这里出现了错误,说找不到之前成功使用的同一个xPath。
错误:摘要:NoSuchElement 详细信息:使用给定的搜索参数无法在页面上找到元素。类:org.openqa.selenium.NoSuchElementException 更多细节:运行 errorDetails 方法
我试图删除/a[2]
以获取/html/.../p
xPath 的末尾,因为它在初始代码中工作,但稍后再次出现错误。
webElem <- remDr$findElement("css", "body")
for (i in 1:5){
Sys.sleep(2)
webElem$sendKeysToElement(list(key = "end"))
}
# Addressing selectors of FASTA on the website
fasta <- remDr$getPageSource()[[1]] %>%
read_html() %>%
html_nodes('pre') %>%
html_text()
fasta
return(fasta)
}
## Writing a function of GET_ACC_NUM dependent on GENE_ID (x)
get_acc_num <- function(x){
link = paste0( 'https://www.ncbi.nlm.nih.gov/gene/', x)
remDr$navigate(link)
remDr$findElement(using = "xpath", value = '/html/body/div[1]/div[1]/form/div[1]/div[5]/div/div[6]/div[2]/div[3]/div/div/div[3]/div/p')$clickElement()
webElem <- remDr$findElement("css", "body")
for (i in 1:5){
Sys.sleep(2)
webElem$sendKeysToElement(list(key = "end"))
}
# Addressing selectors of ACC_NUM on the website
acc_num <- remDr$getPageSource()[[1]] %>%
read_html() %>%
html_nodes('.itemid') %>%
html_text() %>%
str_sub(start= -17)
acc_num
return(acc_num)
}
## Collecting all FUNCTION into tibble
get_data_table <- function(x){
# Extract the Basic information from the HTML
fasta <- get_fasta(x)
acc_num <- get_acc_num(x)
# Combine into a tibble
combined_data <- tibble( Acc_Number = acc_num,
FASTA = fasta)
}
## Running FUNCTION for all x
df <- lapply(dt, get_data_table)
head(df)
我也试着写代码
- 只有
rvest
, - 用 编写循环
for (i in res_id) {}
, - 引入两个以
/html/.../p/a[2]
或.../p
使用结尾的不同 xPathif () {} else {}
但结果更加令人困惑。
我在处理此类任务时正在学习 R 编码,因此欢迎任何建议和批评。