用途
PubChem Database 技能用于查询 PubChem 化学数据库。PubChem 是全球最大的免费化学数据库,包含 1.1 亿以上化合物和 2.7 亿以上生物活性数据。该技能通过 PUG-REST API 和 PubChemPy 提供访问能力,适合需要检索化学结构、分子属性或生物活性数据的场景。
主要能力
化学结构搜索
支持多种标识符类型检索化合物:
- 按化学名称:
pcp.get_compounds('aspirin', 'name') - 按 CID:
pcp.Compound.from_cid(2244) - 按 SMILES:
pcp.get_compounds('CC(=O)OC1=CC=CC=C1C(=O)O', 'smiles') - 按 InChI:
pcp.get_compounds('InChI=1S/C9H8O4/...', 'inchi') - 按分子式:
pcp.get_compounds('C9H8O4', 'formula')
属性检索
可获取分子式、分子量、IUPAC 名称、SMILES、InChI、XLogP、TPSA、氢键供体/受体数量、可旋转键数量、复杂度、电荷等属性。支持通过 PubChemPy 获取完整化合物对象,或使用 get_properties 请求特定属性,也可批量检索多个化合物并整理为 DataFrame。
相似性搜索
使用 Tanimoto 相似度查找结构相似的化合物,可设置相似度阈值(0-100)和最大记录数。注意:大规模查询为异步操作,可能需要 15-30 秒完成,PubChemPy 会自动处理异步模式。
子结构搜索
查找包含特定结构基序的化合物,例如苯环(c1ccccc1)、吡啶(c1ccncc1)、苯酚(c1ccc(O)cc1)、羧酸(C(=O)O)等。
格式转换
在 CID、SMILES、InChI、InChIKey 等化学标识符格式之间转换,并可下载 SDF、JSON、PNG 等结构文件。
结构可视化
生成 2D 结构图像,可通过 PubChemPy 下载 PNG,或使用 PUG-REST 直接 URL 获取。
同义词检索
获取化合物的所有已知名称和同义词。
生物活性数据访问
通过 PUG-REST 获取化合物的生物测定摘要,或使用 scripts/bioactivity_query.py 辅助脚本进行更复杂的生物活性查询,包括活性结果过滤、测定靶点识别、按生物靶点搜索化合物、获取特定测定的活性化合物列表等。
综合化合物注释
通过 PUG-View 访问详细化合物信息,包括化学和物理属性、药物和用药信息、药理学和生物化学、安全与危害、毒性、文献引用、专利等,也可获取特定章节。
使用方式
安装
uv pip install pubchempy
直接 API 访问和生物活性查询:
uv pip install requests
数据分析可选:
uv pip install pandas
辅助脚本
scripts/compound_search.py 提供搜索和检索化合物信息的工具函数,包括 search_by_name、search_by_smiles、get_compound_by_cid、get_compound_properties、similarity_search、substructure_search、get_synonyms、batch_search、download_structure、print_compound_info 等。
scripts/bioactivity_query.py 提供生物活性数据检索函数,包括 get_bioassay_summary、get_compound_bioactivities、get_assay_description、get_assay_targets、search_assays_by_target、get_active_compounds_in_assay、get_compound_annotations、summarize_bioactivities、find_compounds_by_bioactivity 等。
常见工作流
- 化学标识符转换管道:从任意标识符类型出发,提取 CID、名称、SMILES、InChI、InChIKey、分子式等格式。
- 类药性属性筛选:使用 Lipinski 五规则检查分子量、LogP、氢键供体/受体数量。
- 查找相似药物候选物:以已知药物为参考,进行相似性搜索并按类药属性过滤。
- 批量化合物属性比较:对多个化合物检索属性并整理为表格。
- 基于子结构的虚拟筛选:按药效团进行子结构搜索并按属性过滤。
适用场景
- 按名称、结构(SMILES/InChI)或分子式搜索化合物
- 检索分子属性(分子量、LogP、TPSA、氢键描述符)
- 执行相似性搜索以查找结构相关化合物
- 针对特定化学基序进行子结构搜索
- 访问筛选测定的生物活性数据
- 在化学标识符格式之间转换
- 批量处理多个化合物用于类药性筛选或属性分析
限制
速率限制
- 每秒最多 5 个请求
- 每分钟最多 400 个请求
- 每分钟最多 300 秒运行时间
最佳实践
- 重复查询使用 CID:CID 比名称或结构更高效
- 本地缓存结果:存储频繁访问的数据
- 批量请求:尽可能合并多个查询
- 实现延迟:请求之间添加 0.2-0.3 秒延迟
- 优雅处理错误:检查 HTTP 错误和缺失数据
- 使用 PubChemPy:更高层抽象可处理许多边界情况
- 利用异步模式:用于大规模相似性/子结构搜索
- 指定 MaxRecords:限制结果以避免超时
错误处理
可捕获 NotFoundError(化合物未找到)、BadRequestError(请求格式无效)、TimeoutError(请求超时,尝试缩小范围)、IndexError(无结果返回)等异常。
故障排除
- 化合物未找到:尝试替代名称或同义词,使用已知 CID,检查拼写和化学名称格式
- 超时错误:减少 MaxRecords 参数,添加请求延迟,使用 CID 代替名称
- 属性值为空:并非所有属性对所有化合物可用,访问前检查属性是否存在
- 超出速率限制:实现请求延迟,使用批量操作,考虑本地缓存
- 相似性/子结构搜索挂起:这些是异步操作,可能需要 15-30 秒,PubChemPy 自动处理轮询,超时可减少 MaxRecords
其他资源
- PubChem 主页:https://pubchem.ncbi.nlm.nih.gov/
- PUG-REST 文档:https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest
- PUG-REST 教程:https://pubchem.ncbi.nlm.nih.gov/docs/pug-rest-tutorial
- PubChemPy 文档:https://pubchempy.readthedocs.io/
- PubChemPy GitHub:https://github.com/mcs07/PubChemPy