Python爬虫借助Genecards网站将基因全名转换为Gene Symbol——历时8小时!

本文介绍了使用Python爬虫通过Genecards网站将基因全名转换为Gene Symbol的过程,详细阐述了如何处理cookies、请求网页、解析数据以及处理可能出现的问题。尽管存在潜在的准确性问题和网络挑战,但该方法节省了大量手动工作,最终耗时8小时完成了16000+基因的转换。

历时8小时的爬虫:基因全名与基因名缩写的转换——Genecards

在爬取了TCMSPW的中药材的靶向基因后,得到的靶向基因名称是全名,但是后续分析需要的是基因名称缩写(即Gene Symbol)。最初尝试用R语言的org.Hs.eg.db包来进行转换,然而结果不尽人意,能转换的基因寥寥无几,于是又将目光投向了Genecards。。

基本思路是将基因全名进行检索,然后选取检索结果中第一个,这样的弊端就是第一个结果未必就是正确的那一个,但是Genecars也是根据匹配相似性进行排序的,因此概率较小。(本来为了更加精确打算在每个检索结果的跳转页面中进行匹配准确性判断,但是考虑到这样做相当费时,而且还会给Genecards的服务器造成压力,自己的IP也有被封的风险,得不偿失)

以下是所需的库和参数,base_url用来第一次请求获取cookies,url用来进行第二次请求,解析网页,解析工具为lxml,然后用xlsxwriter将得到的结果写入excel。

import requests
from lxml import etree
import openpyxl
import xlsxwriter
import time
base_url = 'https://www.genecards.org'
url = 'https://www.genecards.org/Search/Keyword?queryString=%20Cholinesterase'
headers = {
   
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36',
    'cookie': 'ASP.NET_SessionId=fbn1f52ppnbotksqpszu4lhe; rvcn=0Kpw76RjQWVPghHk_eHFMzdye5bqaMDGx5BUmO0BCiQv5NL9fBg_F6DHp2D7zcU955B-K0moDdWWLEgyLvPPU8H7vRY1; ARRAffinity=bbda99ae9f2cbea3a7894c6d34604e73c55fed16cf5f41fadce3a25415ea24f4; visid_incap_146342=JJg8EvqnRL21kFlyDqoJtVp4jF4AAAAAQUIPAAAAAADoDyfKhHCxYjc4Esv7sFIl; nlbi_146342=3Z3Bda14by/DQ4RJmewSQgAAAABIDL4M3uKW9Nn5B+a0Tx19; _ga=GA1.2.1127478822.1586264159; _gid=GA1.2.772327545.1586264159; __gads=ID=00050bb968e74cd0:T=1586264160:S=ALNI_MZrmbqyOxyLDo2Z5_k5rcoA7tMkLg; incap_ses_433_146342=JsQwcq4j9GPUtFdrVVQCBrF/jF4AAAAA4L1izrsxqq8bGasGou8j5g=='
}

读取先前保存的excel文件

def read_target():
    fp = openpyxl
在不同物种之间将基因符号(gene symbols) ENTREZ ID 相互转换,通常需要依赖跨物种的基因注释数据库或工具,这些资源能够提供不同基因标识符之间的映射关系。以下是一些常用的方法和步骤: ### 1. 使用生物信息学工具和数据库 许多公共数据库和软件包支持不同物种之间的基因标识符转换。以下是一些常用的资源: - **NCBI Gene Database**:NCBI 提供了多种物种的基因信息,可以通过 Entrez Gene ID 查找对应的基因符号,也可以反向查找。 - **Ensembl**:Ensembl 提供了稳定的基因 ID,并支持多个物种的基因注释。通过 Ensembl 的 BioMart 工具,可以轻松地在不同基因标识符之间进行转换。 - **UniProt**:UniProt 提供了广泛的蛋白质和基因注释信息,支持不同物种之间的标识符映射。 - **KEGG**:KEGG 提供了不同物种的基因和代谢通路信息,支持基因标识符的转换。 这些数据库通常提供 API 接口或下载文件,方便用户进行自动化处理。 ### 2. 使用 R/Bioconductor 包 R 语言中的 Bioconductor 项目提供了多个用于基因标识符转换的包,例如: - **org.Hs.eg.db**、**org.Mm.eg.db** 等:这些包包含了特定物种的基因注释信息,支持从基因符号到 ENTREZ ID 的映射。 - **biomaRt**:`biomaRt` 包可以连接 Ensembl 的 BioMart 数据库,支持跨物种的基因标识符转换。例如,使用 `useMart()` 函数连接特定物种的数据库,然后通过 `getBM()` 函数查询所需的字段。 - **AnnotationDbi**:该包提供了统一的接口来访问各种注释数据库,支持从基因符号到 ENTREZ ID 的转换。 以下是一个使用 `biomaRt` 进行基因标识符转换的示例代码: ```r library(biomaRt) # 连接到 Ensembl 的 human 数据库 ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl") # 假设我们有一个基因符号列表 gene_symbols <- c("TP53", "BRCA1", "EGFR") # 使用 getBM 函数查询对应的 ENTREZ ID entrez_ids <- getBM(attributes = c("hgnc_symbol", "entrezgene_id"), filters = "hgnc_symbol", values = gene_symbols, mart = ensembl) # 查看结果 print(entrez_ids) ``` ### 3. 使用在线工具 一些在线工具可以帮助用户在不同物种之间转换基因符号和 ENTREZ ID,例如: - **Ensembl BioMart**:访问 [Ensembl BioMart](https://www.ensembl.org/biomart) 网站,选择目标物种和数据库,然后选择需要的字段(如基因符号和 ENTREZ ID),最后导出结果。 - **DAVID**:DAVID 工具支持基因标识符的转换和功能注释分析。 - **GeneCards**:GeneCards 提供了丰富的基因信息,支持不同物种之间的基因标识符映射。 ### 4. 数据整合标准化 在处理多个物种的数据时,确保使用相同的基因组构建(genome build)非常重要[^2]。基因组构建的不同可能导致基因坐标和标识符的变化,因此需要确保所有数据都基于相同的参考基因组。例如,如果使用的是 GRCh38 构建的人类基因组,则应确保所有注释和转换都基于该构建。 此外,Ensembl 的稳定 ID 结构[^4] 可以帮助用户在不同版本之间保持一致性。Ensembl ID 通常由物种前缀、类型标识和数字组成,有时还包括版本号(如 ENSG00000139618.15)。 ### 5. 自定义映射表 如果需要频繁进行基因标识符转换,可以创建自定义的映射表。从 NCBI、Ensembl 或 UniProt 下载最新的基因注释文件,提取所需的字段(如基因符号、ENTREZ ID、Ensembl ID 等),并将其存储为 CSV 或数据库文件。之后,可以使用简单的脚本(如 Python 或 R)进行快速查找和转换。 例如,使用 Python 进行基因符号到 ENTREZ ID 的映射: ```python import pandas as pd # 读取包含基因符号和 ENTREZ ID 的映射文件 gene_mapping = pd.read_csv("gene_symbol_to_entrez.csv") # 创建一个字典用于快速查找 gene_dict = dict(zip(gene_mapping['gene_symbol'], gene_mapping['entrez_id'])) # 示例:将基因符号转换为 ENTREZ ID gene_symbols = ["TP53", "BRCA1", "EGFR"] entrez_ids = [gene_dict.get(gene, None) for gene in gene_symbols] print(entrez_ids) ``` ### 6. 处理多物种数据 当处理多个物种的数据时,可以使用 R 或 Python 脚本读取多种格式的文件(如 .txt、.xls、.json),并将它们统一存储到一个表格中[^3]。这样可以方便后续的分析和比较。例如,使用 R 读取多个物种的基因文件并合并为统一格式: ```r library(readr) library(dplyr) # 读取多个物种的基因文件 files <- list.files(path = "data/", pattern = "\\.csv$", full.names = TRUE) data_list <- lapply(files, read_csv) # 合并所有数据为一个表格 data_all <- bind_rows(data_list, .id = "Org_name") # 查看前几行 head(data_all) ``` ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值