如何修改SciFinder API Python代码获取密度、沸点等物性数据
解决SciFinder API获取物性及反应检索的问题
一、获取密度、沸点等物性数据的关键修改
默认的substances接口仅返回基础元数据,必须通过fields参数显式指定需要的物性字段,API才会返回对应数据。具体修改点:
- 在请求URL中添加
fields参数,多个字段用英文逗号分隔 - 常用物性字段参考:
molecularWeight:分子量boilingPoint:沸点density:密度criticalTemperature:临界温度meltingPoint:熔点molecularFormula:分子式
修改后的请求URL示例(移除原代码中重复的冗余请求):
resp = requests.get( 'https://helium.cas.org/integration/v1/substances?str=Cc1nc%28n%28n1%29C%28C%29C%29c2cn3c%28n2%29-c4ccc%28cc4OCC3%29c5cnn%28c5%29C%28C%29%28C%29C%28%3DO%29N&strMode=drw&offset=0&length=100&echo=false&strHighlight=false&facet=true&fq=Number%20of%20Components%3A1&fields=casRn,uri,name,molecularWeight,boilingPoint,density,criticalTemperature', headers=headers )
遍历结果时,建议用get()方法访问字段,避免字段不存在时报错:
for substance in json['substances']: print(f"CAS号: {substance['casRn']}") print(f"名称: {substance['name']}") print(f"分子量: {substance.get('molecularWeight', '无数据')}") print(f"沸点: {substance.get('boilingPoint', '无数据')}") print(f"密度: {substance.get('density', '无数据')}") print(f"临界温度: {substance.get('criticalTemperature', '无数据')}") print("---")
二、反应检索的实现方法
要进行反应检索,需切换到reactions端点,核心修改点:
- 请求URL改为
https://helium.cas.org/integration/v1/reactions strMode设为rxn(表示反应式搜索)- 同样用
fields指定需要返回的反应字段,比如reactionId、reactionSmiles、reactants、products等
示例代码:
# 搜索生成目标产物的反应 resp_reaction = requests.get( 'https://helium.cas.org/integration/v1/reactions?str=Cc1nc(n(n1)C(C)C)c2cn3c(n2)-c4ccc(cc4OCC3)c5cnn(c5)C(C)(C)C(=O)N&strMode=rxn&offset=0&length=10&fields=reactionId,reactionSmiles,reactants,products', headers=headers ) if resp_reaction.status_code != 200: raise Exception(f'GET reactions/ {resp_reaction.status_code}') reaction_json = resp_reaction.json() for reaction in reaction_json['reactions']: print(f"反应ID: {reaction['reactionId']}") print(f"反应SMILES: {reaction['reactionSmiles']}") print(f"反应物: {', '.join([r['name'] for r in reaction['reactants']])}") print(f"产物: {', '.join([p['name'] for p in reaction['products']])}") print("---")
三、完整修改后的代码
import requests Bearer_Token = "<token>" # 替换为你的实际Token headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {Bearer_Token}' } # 1. 获取带物性数据的物质信息 substance_url = ( 'https://helium.cas.org/integration/v1/substances?' 'str=Cc1nc%28n%28n1%29C%28C%29C%29c2cn3c%28n2%29-c4ccc%28cc4OCC3%29c5cnn%28c5%29C%28C%29%28C%29C%28%3DO%29N&' 'strMode=drw&offset=0&length=100&echo=false&strHighlight=false&facet=true&' 'fq=Number%20of%20Components%3A1&' 'fields=casRn,uri,name,molecularWeight,boilingPoint,density,criticalTemperature,molecularFormula' ) resp_substance = requests.get(substance_url, headers=headers) if resp_substance.status_code != 200: raise Exception(f'GET substances/ {resp_substance.status_code}') substance_json = resp_substance.json() print("=== 物质物性数据 ===") for substance in substance_json['substances']: print(f"CAS号: {substance['casRn']}") print(f"名称: {substance['name']}") print(f"分子式: {substance.get('molecularFormula', '无数据')}") print(f"分子量: {substance.get('molecularWeight', '无数据')}") print(f"沸点: {substance.get('boilingPoint', '无数据')}") print(f"密度: {substance.get('density', '无数据')}") print(f"临界温度: {substance.get('criticalTemperature', '无数据')}") print("---") # 2. 反应检索示例 reaction_url = ( 'https://helium.cas.org/integration/v1/reactions?' 'str=Cc1nc(n(n1)C(C)C)c2cn3c(n2)-c4ccc(cc4OCC3)c5cnn(c5)C(C)(C)C(=O)N&' 'strMode=rxn&offset=0&length=10&' 'fields=reactionId,reactionSmiles,reactants,products' ) resp_reaction = requests.get(reaction_url, headers=headers) if resp_reaction.status_code != 200: raise Exception(f'GET reactions/ {resp_reaction.status_code}') reaction_json = resp_reaction.json() print("\n=== 反应检索结果 ===") for reaction in reaction_json['reactions']: print(f"反应ID: {reaction['reactionId']}") print(f"反应SMILES: {reaction['reactionSmiles']}") reactant_names = [r['name'] for r in reaction.get('reactants', [])] product_names = [p['name'] for p in reaction.get('products', [])] print(f"反应物: {', '.join(reactant_names) if reactant_names else '无数据'}") print(f"产物: {', '.join(product_names) if product_names else '无数据'}") print("---")
内容的提问来源于stack exchange,提问作者Rekton Lee
相关产品推荐
相关产品推荐

