背景:
前几天老师交给我一个任务,给我一个基因列表,让我查找它们所编码的蛋白质的蛋白质序列。我上了一下uniprot数据库,发现这个任务可以分成两步:
- 找到这个基因在Uniprot数据库中所对应的蛋白质编码
- 根据蛋白质编码批量下载蛋白质序列(以前的文章)
下面我们以基因“BOP1”为例:
然后可以看到:
这里我们可以看到,有一个个框,代表不同的蛋白。我们要找的是人,所以应该是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()
我们来看看输出文件:
猜你喜欢
- 2小时前Android Camera2开启电子防抖(EIS)和光学防抖(OIS)
- 2小时前解决安卓12限制32个线程
- 2小时前概述、搭建Redis服务器、部署LNP+Redis、创建Redis集群、连接集群、集群工作原理
- 2小时前华为机考入门python3--(0)模拟题2-vowel元音字母翻译
- 2小时前爬取的数据可以入表吗?怎样入表?
- 2小时前ffmpeg实现视频解码
- 2小时前Android13音频子系统分析(三)---音效算法集成框架
- 2小时前Hutool工具包中HttpUtil的日志统一打印以及统一超时时间配置
- 2小时前基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现
- 35分钟前cad工具栏没了(cad工具栏都没了)
网友评论
- 搜索
- 最新文章
- 热门文章