如何一次性批量下载RCSB中某蛋白质的全部7000个PDB文件?
批量下载RCSB中特定蛋白质的PDB文件方法
方法1:RCSB官网内置批量功能
- 用目标蛋白质的UniProt ID、基因名或其他标识在RCSB搜索,获取所有关联的PDB条目列表
- 勾选页面顶部的「全选」按钮(若条目跨多页,需确认是否支持一键全选所有分页内容,部分情况下可能需要手动切换页次多选)
- 点击页面上方的「Download」按钮,选择「PDB Files」选项,系统会自动将所有选中文件打包为ZIP压缩包供下载
- 注意:如果条目数量过多(比如7000个),可能需要分批次选择下载,避免请求超时导致失败
方法2:通过RCSB REST API编写脚本批量下载
步骤1:获取目标蛋白质对应的所有PDB ID列表
可以通过RCSB的API接口查询,比如基于UniProt ID查询的请求格式(用bash的curl命令):
curl "https://data.rcsb.org/rest/v1/core/uniprot/{你的UniProt ID}/entry_ids"
将返回的JSON格式PDB ID列表提取出来,保存为一个文本文件(命名为pdb_ids.txt,每行一个PDB ID)。
步骤2:批量下载脚本
Bash脚本示例:
# 循环读取pdb_ids.txt中的每个ID并下载 while read pdb_id; do curl -O "https://files.rcsb.org/download/${pdb_id}.pdb" done < pdb_ids.txt
Python脚本示例(支持错误重试、进度提示):
import requests from time import sleep with open('pdb_ids.txt', 'r') as f: pdb_ids = [line.strip() for line in f if line.strip()] download_dir = "./pdb_files" import os os.makedirs(download_dir, exist_ok=True) for idx, pdb_id in enumerate(pdb_ids, 1): url = f"https://files.rcsb.org/download/{pdb_id}.pdb" save_path = os.path.join(download_dir, f"{pdb_id}.pdb") try: response = requests.get(url, timeout=10) response.raise_for_status() with open(save_path, 'wb') as out_f: out_f.write(response.content) print(f"[{idx}/{len(pdb_ids)}] 已下载: {pdb_id}") except requests.exceptions.RequestException as e: print(f"[{idx}/{len(pdb_ids)}] 下载失败 {pdb_id}: {str(e)}") sleep(2) # 失败后暂停2秒重试
方法3:借助生物信息学工具库
比如使用Python的biopython库,内置PDB下载功能:
from Bio.PDB import PDBList import os pdbl = PDBList() download_dir = "./pdb_files" os.makedirs(download_dir, exist_ok=True) with open('pdb_ids.txt', 'r') as f: pdb_ids = [line.strip() for line in f if line.strip()] for pdb_id in pdb_ids: # 下载PDB文件到指定目录,格式为pdb pdbl.retrieve_pdb_file(pdb_id, pdir=download_dir, file_format='pdb')
使用前需要先安装biopython:pip install biopython
内容的提问来源于stack exchange,提问作者SAMIRA
相关产品推荐
相关产品推荐

