如何利用ChEMBL API批量下载指定ChEMBL ID分子的目标描述符?
批量获取ChEMBL分子指定描述符的实现方案
依赖准备
先安装所需的Python库:
pip install chembl-webresource-client pandas
完整代码实现
import pandas as pd from chembl_webresource_client.new_client import new_client import time # 读取你的ChEMBL ID列表CSV # 替换成你的文件名,确保ID列名正确(示例用'chembl_id') raw_df = pd.read_csv('your_chembl_ids.csv') target_ids = raw_df['chembl_id'].tolist() # 初始化ChEMBL API客户端 mol_client = new_client.molecule # 定义需要提取的描述符(对应API字段名) required_desc = [ 'tpsa', 'num_h_acceptors', 'num_h_donors', 'cx_acidic_pka', 'cx_basic_pka', 'qed' ] def fetch_mol_descriptors(chembl_id): """单分子描述符获取函数,含异常处理""" try: mol_info = mol_client.get(chembl_id) # 提取目标描述符,缺失值自动填充为NaN desc_data = {key: mol_info.get(key, None) for key in required_desc} desc_data['chembl_id'] = chembl_id return desc_data except Exception as err: print(f"⚠️ {chembl_id} 获取失败: {str(err)}") # 返回含ID的空值行,保证结果完整性 return {**{key: None for key in required_desc}, 'chembl_id': chembl_id} # 批量获取,添加短延时避免API限流 desc_results = [] for cid in target_ids: desc_results.append(fetch_mol_descriptors(cid)) time.sleep(0.1) # 可根据情况调整延时时间 # 合并原始数据与描述符,保存结果 result_df = pd.DataFrame(desc_results) final_df = pd.merge(raw_df, result_df, on='chembl_id', how='left') final_df.to_csv('chembl_descriptors_output.csv', index=False)
关键说明
- 字段映射:你要求的描述符与ChEMBL API字段的对应关系:
TPSA→tpsaNumHAcceptors→num_h_acceptorsNumHDonors→num_h_donorsCX Acidic pKa→cx_acidic_pkaCX Basic pKa→cx_basic_pkaqed→qed
- CSV列名:如果你的CSV中存储ChEMBL ID的列不是
chembl_id,请修改代码中对应变量名 - API限流:ChEMBL API有请求频率限制,添加
time.sleep(0.1)能避免被暂时封禁,若处理上千条ID可适当延长延时 - 异常处理:代码会跳过获取失败的分子并打印错误信息,保证整体任务不会中断
内容的提问来源于stack exchange,提问作者LePe77it
相关产品推荐
相关产品推荐

