根据基因名批量查找它的Uniprot编号

背景:

前几天老师交给我一个任务,给我一个基因列表,让我查找它们所编码的蛋白质的蛋白质序列。我上了一下uniprot数据库,发现这个任务可以分成两步:

  • 找到这个基因在Uniprot数据库中所对应的蛋白质编码
  • 根据蛋白质编码批量下载蛋白质序列(以前的文章)

下面我们以基因"BOP1"为例:

然后可以看到:

这里我们可以看到,有一个个框,代表不同的蛋白。我们要找的是人,所以应该是Homo sapiens。Gene也是BOP1。对应上了!Q14137就是我们要找的uniprot编码。也可以这样说:BOP1~Q14137。

知道了一个那好办,给我们100,1000个呢?这时候我们的爬虫就出现了。直接给代码:

python 复制代码
# 导包
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.edge.options import Options
from openpyxl import Workbook
workbook = Workbook()
sheet = workbook.active


#加载selenium配置
user_data_dir = r'C:\Users\*****'
options = Options()
options.add_argument(f'--user-data-dir={user_data_dir}')
driver = webdriver.Edge(options=options)
#读取文件
file_path = r'*****/step1.xlsx'
df = pd.read_excel(file_path, header=None)
# 获取蛋白名称列的数据
protein_names = df[0].tolist()
#开爬
for protein in protein_names:
    # 构建带有查询参数的URL
    url = f'https://www.uniprot.org/uniprotkb?query={protein}'
    print(url)
    driver.get(url)

    # 使用Selenium等待页面加载完成(最多等待30秒)
    wait = WebDriverWait(driver, 30)
    wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/div/div/div/div/main/ul/li[2]/section/div[1]/div[1]/h2/a/span')))

    # 使用XPath查找页面上的内容
    #xpath_expression = '/html/body/div/div/div/div/main/ul/li/section/div[1]/div[1]/h2/a/span'
    xpath_expression = '/html/body/div/div/div/div/main/ul/li/section/div[1]/div[2]/div'

    # 使用XPath查找页面上的内容
    ul = driver.find_element(By.XPATH, '/html/body/div/div/div/div/main/ul')

    lis = ul.find_elements(By.TAG_NAME, 'li')

    for li in lis:
        title = li.find_element(By.XPATH, './section/div[1]/div[2]/div').text
        result = title.split("·")
        if protein in result[1] and 'Homo sapiens (Human)' in result[2]:
            protein_slice = li.find_element(By.XPATH, './section/div[1]/div[1]/h2/a/span').text
            protein_slice = protein_slice.split("·")
            result = [x.strip() for x in protein_slice]
            protein_name = result[0]
            sheet.append([protein, result[0]])
            break

output_file = 'output2.xlsx'
workbook.save(output_file)

# 关闭浏览器
driver.quit()

我们来看看输出文件:

相关推荐
tqs_1234527 分钟前
Agent智能体+Skill插件引擎+Milvus混合检索 技术沉淀
java·python·milvus
眼泪划过的星空40 分钟前
LangChain 两大基础提示词模板:PromptTemplate 与 ChatPromptTemplate 详解
人工智能·python·langchain
狗都不学爬虫_41 分钟前
AI逆向 - 99aq中心滑块验证+登录(wasm纯算)
爬虫·python·网络爬虫
天才测试猿1 小时前
实例介绍:Unittest框架及自动化测试实现流程
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
veminhe2 小时前
元数据索引有关的错
人工智能·python
一次旅行2 小时前
AutoAWQ完整实战:MIT激活感知AWQ量化,模型显存减半、推理提速且精度无损
人工智能·python·算法
ask_baidu2 小时前
python实现Doris的streamLoad
开发语言·python
GrowthDiary0072 小时前
算法题:寻找二维数组top k问题
数据结构·python·算法
眼泪划过的星空2 小时前
使用LangGraph构建智能体:从基础到高级实战
人工智能·python·langchain
丙氨酸長鏈3 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#