pubchem数据库,就不过多介绍了。
今天在使用这个网站的时候,发现了这个网站的REST接口,我们就来看一下:
pubchem提供了一个接口叫做
本文档的目的是解释 PubChem 的 PUG REST 服务的结构,
并以各种使用案例作为说明,帮助新用户了解该服务的工作原理,
以及如何构建作为该服务接口的 URL。PUG 是 Power User Gateway
(强力用户网关)的缩写,它包括多种编程访问 PubChem 数据和服务的方法。
这种 REST 风格的接口旨在为脚本、网页中嵌入的 javascript 和第三方应
用程序等提供访问 PubChem 的简单途径,而不需要其他版本的 PUG 所需的
XML、SOAP 信封等开销。PUG REST 还能方便地访问 PubChem 记录信息,
这是其他任何服务都无法提供的。
————来自官网的介绍
再来看看这个PUG到底是干啥的?
PUG REST 的基本单位是 PubChem 标识符,它有三种类型:SID(物质)、
CID(化合物)和 AID(检测)。使用这些标识符的这项服务的概念框架由三部
分请求组成:1)输入--即我们谈论的是什么标识符;2)操作--如何处理这些标
识符;3)输出--应返回哪些信息。这种设计的美妙之处在于,请求的这三个部分
(大部分)都是独立的,从而允许在单个请求中进行组合扩展。举例来说,
任何形式的输入(指定一组 CID)都可以与处理 CID 的任何操作以及与所选
操作相关的任何输出格式相结合。因此,你可以将这些构件以多种方式组合起来,
创建定制的请求,而不是支持一系列单独的、定义狭隘的服务请求。
所以 sid cid 和aid其实都是一些化合物的id,我们可以通过请求这个id来获得与其对应的属性:
官网的流程图,可以看到数据的返回格式是很多种的。
例如:
例如,该服务支持通过 SMILES 输入化学结构。它支持将化学结构输出为
PNG 格式的图像。你可以将这两者结合到一个 SMILES 字符串的可视化
请求中 在这种情况下,无论该特定化学物质是否存在于 PubChem 数据库中
!而这几乎是你可以在网页浏览器中手动输入的内容:
网址:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/smiles/CCCCBr/PNG
结果:
其实大家可以看这个网址的请求,就能发现其集中的奥妙:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/smiles/CCCCBr/PNG
rest/pug/compound/smiles/CCCCBr/PNG
首先是rest,说明这是一个restful设计的接口(不懂的同学可以问一下学计算机的童鞋)
然后是pug,就是这个接口的请求地址了
然后是compound,就是类型是化合物咯
然后是smiles,那么就是要看这个分子的smiles分子式了
然后是CCCCBR,这个就是分子的化学式咯(我觉得应该是碳碳碳碳溴的意思)
然后最后一个是PNG 那当然就返回图片咯
所以现在大家可能就更清楚一些了,那我们再看一个请求:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/11359451/property/MolecularFormula,MolecularWeight,Synonyms,InChI,InChIKey,CanonicalSMILES/JSON
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/11359451/property/MolecularFormula,MolecularWeight,InChI,InChIKey,CanonicalSMILES/JSON
。我们开始分析这个网址的参数:
首先是rest,pug,compound这三个就先不说了
然后就是cid,这次使用的是化合物id
然后11359451就是本次我们搜索的时候化合物的id咯
property就是说我们这次需要请求的是属性
MolecularFormula,MolecularWeight,InChI,InChIKey,CanonicalSMILES
。这些参数则是说明了我们请求的具体参数,分别是:
分子表达式 molecular Formula
分子重量 molecular weight
inchi值和inchikey
还有该化合物的smiles分子式
最后一个参数JSON指定了本次请求的输出格式是json格式的字符串
那我们来看一下结果:
对应的参数都已经输出了。
这样的好处就是我们在写爬虫的时候,可以批量的通过cid来对数据进行爬取,
这只是一个非常简单的demo,使用requests进行请求,然后可以扩展的地方有很多:
今天Tom已经使用这个api接口对数据进行了批量的爬取,所以以后就不用很机械的进行一个一个的搜索了。
今天的结果: