【bash】JVNDB識別子 -> CVE識別子 変換 | hacknote のPython版です。
HTMLをXPathでごちゃごちゃする場合と異なって? XMLの場合は名前空間(xmlns:vuldef="http://jvn.jp/vuldef/"
のような感じで、対象XMLのヘッダあたりに定義されているやつ)を明示的に指定してあげなければアカンのです。
(ここではvuldef
を指定。)
#!/usr/bin/env python # -*- coding: utf-8 -*- # pipで要インストール # pip install lxml urllib3 from lxml import etree import urllib3 from StringIO import StringIO response = urllib3.PoolManager().request('GET', "http://jvndb.jvn.jp/myjvn?method=getVulnDetailInfo&vulnId=JVNDB-2016-002463").data f = StringIO(response) doc = etree.parse(f) selection = doc.xpath( "//vuldef:RelatedItem[@type='advisory' and .//vuldef:Name[contains(text(),'NVD')]]/vuldef:VulinfoID/text()", namespaces = { 'vuldef': "http://jvn.jp/vuldef/" } ) print(selection[0]) # => CVE-2016-3074