使用 ID 号列表从在线数据库检索信息

使用 ID 号列表从在线数据库检索信息

我有一份药品 ID 列表。我需要在网站 (ebi.ac.uk/chembl)(一个数据库)上搜索每个药品 ID,并获取有关该药品的信息(包括其结构和其他详细信息),然后将其列在表格中。

我认为我可以做到这一点的一种方法是编写一个命令,每次将药物 ID 放在 url 末尾并提取每种药物的信息。例如,这是药物 ID 列表:

CHEMBL3126679
CHEMBL3126678
CHEMBL478673
CHEMBL2386960
CHEMBL2326937
CHEMBL1258156
CHEMBL393858

这是包含某种药物信息的 URL:

https://www.ebi.ac.uk/chembl/compound/inspect/CHEMBL3126679

最后一部分每次都应该改变。

我可以使用什么命令来实现这一点?

答案1

您可以使用 shell 循环来处理 ID,curl或者wget获取数据,以及类似pup来处理 HTML。例如,假设 ID 位于名为 的文件中foo,那么您可以执行以下操作:

while read id
do
    curl -sL "https://www.ebi.ac.uk/chembl/compound/inspect/$id" |
      pup 'tr:parent-of(td:contains("Canonical SMILES")) td:nth-child(2) text{}'
done < foo

在这里,我使用pup以下命令:

  1. 寻找包含以下内容的表格Canonical SMILEStd:contains("...")
  2. 获取其父行 -tr:parent-of(...)
  3. 并打印该行的第二个单元格:td:nth-child(2) text{}

我得到如下输出:

CC1=CN([C@H]2C[C@H](N=[N+]=[N-])[C@H](O2)C(=O)N)C(=O)NC1=O


NC(=O)[C@H]1O[C@H](C[C@@H]1N=[N+]=[N-])N2C=CC(=O)NC2=O


NC1=NC(=O)N(Cc2cn(nn2)[C@H]3C[C@H](O)[C@@H](CO)O3)C=C1


CC1(C)CC[C@@]2([C@H](O)C[C@]3(C)C(=CC[C@@H]4[C@@]5(C)CCC(N)C ...
Download SMILES



COC(=O)c1nn(c2cccc(F)c2)c3c4ccccc4S(=O)(=O)N(C)c13


COC(=O)[C@H](C)NP(=O)(OC[C@H]1O[C@@H](N2C=CC(=O)NC2=O)[C@](C ...
Download SMILES



CCO[C@]1(CO)O[C@H]([C@H](O)[C@@H]1O)N2C=CC(=NC2=O)N

我会让你检查 HTML 并弄清楚其他过滤器。

相关内容