通过DrissionPage爬取Uniprot上的DNA-Binding点位

Uniprot

提供了蛋白质的很多信息,可以从中提取结合点位。

DrissionPage

比起Selenium更强大的爬虫软件,Selenium已经被反爬而且配置困难。

Code

  • 输入是蛋白质的Uniprot ID TXT文件,一个id一行
  • 输出为CSV,表头为 ID,索引,结合蛋白列表。
from math import e
from tkinter import W
from DrissionPage import Chromium, ChromiumOptions

import csv


def write_csv(data):
   # 打开文件进行写入
   with open('output.csv', 'w', newline='', encoding='utf-8') as file:
       writer = csv.writer(file)
       
       # 写入表头
       writer.writerow(['id','index', 'DNA binding'])
       
       # 写入数据行
       for row in data:
           # 将列表转换为字符串,例如 "1,2,3,4"
           list_str = ','.join(map(str, row[2]))
           writer.writerow([row[0],row[1], list_str])

# 创建配置对象
co = ChromiumOptions()
co.set_browser_path(r'C:\Chrome_123.0.6312.59_x64.Green\App\chrome.exe')

browser = Chromium(addr_or_opts=co)
tab = browser.latest_tab  
ids=open('PDB2272_P.txt','r').readlines()
open_file=open('PDB2272_P_binding.txt','w+')
data = []
for index,id in enumerate(ids):
   id=id.replace('\n','')

   _list=[]
   tab.get(f'https://www.uniprot.org/uniprotkb/{id}/entry')  
   eles = tab.eles('@tag()=tr')

   for ele in eles:
       if ele.text.find('DNA binding') != -1:
           if ele.text.startswith('+'):
               txt=ele.text.split('\n')[0]
               print(id,txt.split('\t')[3])
               _range=txt.split('\t')[3].split('-')
               if len(_range)==1:
                   _list.append(int(_range[0]))
               else:
                   _list.extend(list(range(int(_range[0]),int(_range[1])+1)))
   
   
   item=[id,index,_list]
   data.append(item)
   write_csv(data)

posted @ 2025-08-24 17:50  ylifs  阅读(13)  评论(0)    收藏  举报