У меня есть список идентификаторов наркотиков. Мне нужно выполнить поиск каждого идентификатора препарата на веб-сайте (ebi.ac.uk/chembl), который является базой данных, и получить информацию о препарате, включая их структуру и другие данные, и перечислить их в таблице.
Я думаю, что один из способов сделать это - написать команду, чтобы каждый раз указывать идентификатор препарата в конце URL-адреса и извлекать информацию для каждого препарата. например, это список идентификаторов лекарств:
CHEMBL3126679
CHEMBL3126678
CHEMBL478673
CHEMBL2386960
CHEMBL2326937
CHEMBL1258156
CHEMBL393858
, и это URL, который содержит информацию для одного лекарства:
https://www.ebi.ac.uk/chembl/compound/inspect/CHEMBL3126679
Последняя часть должна меняться каждый раз.
Какую команду я могу использовать для достижения этой цели?
Вы можете использовать цикл оболочки для обработки идентификаторов, curl
или wget
, чтобы получить данные, и инструменты, такие как pup
, чтобы получить обработку HTML. Например, скажем, идентификаторы находятся в файле с именем 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 и выяснить другие фильтры.