12012010 chemoinformatics Python
mixiでpubchemからSMILESを抜き出すのは?みたいなエントリがたってたのだけど消えちゃったみたい。
なんか、ここは宿題まるなげちゃうわーみたいな厳しいコメントついてたからかな。まぁああいったコメント書くヒトはすっきりするのかもしれんけど、見るほうにとっては情報量ゼロのゴミなんだよなー。まだ、課題まるなげっていう情報のほうが情報量的に有意義。
ちょっと考えたのでここに書いておく。
XMLをBeautifulSoupで
import urllib2,sys
from BeautifulSoup import BeautifulSoup
cid = sys.argv[1]
url = 'http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=%s&disopt=DisplayXML' % cid
opener = urllib2.build_opener()
html = opener.open(url).read()
soup = BeautifulSoup(html)
print soup.findAll('pc-infodata_value_sval')[-2].string
xmlがなんかfindしにくいので配列の要素指定に-2とかやって良くない香り。この程度のだったらxmlじゃなくてSDFを正規表現でいじるな。
import urllib2,sys,re
cid = sys.argv[1]
url = 'http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=%s&disopt=DisplaySDF' % cid
html = urllib2.build_opener().open(url).read()
p = re.compile('<PUBCHEM_OPENEYE_CAN_SMILES>\n(.+)\n')
m = p.search(html)
print m.group(1)
biopythonとかでもいけそうな気がするし、urllib2+openbabelの組み合わせでも良いかもしれない。