我有一份药品 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
以下命令:
- 寻找包含以下内容的表格
Canonical SMILES
:td:contains("...")
- 获取其父行 -
tr:parent-of(...)
- 并打印该行的第二个单元格:
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 并弄清楚其他过滤器。