上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

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

guduadmin12小时前

背景:

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

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

    下面我们以基因“BOP1”为例:

    根据基因名批量查找它的Uniprot编号,第1张

    然后可以看到:

    根据基因名批量查找它的Uniprot编号,第2张

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

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

    # 导包
    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()
    

    我们来看看输出文件:

    根据基因名批量查找它的Uniprot编号,第3张

网友评论