python:lxml:xpathサンプル
Last-modified: 2013-08-24 (土) 02:14:21 (3896d)
Top / python:lxml:xpathサンプル
python:lxml:xpathサンプル †
lxmlのxpathを使うサンプルとして、はてなフォトライフのrssを解析するサンプルを作ってみました。
なんか、namespace周りで躓きそうなところがxsltと一緒でだな、と。
なので、ちょっと残しておこうかな、と。
なんか珍しくソースコードに日本語のコメントを入れているので、詳細はコメントを参照のことw
ちなみに、urllib2使うときによくproxyの設定方法を調べてたので、合わせて書き残すことに。
proxy使いたい場合は、プロキシサーバを指定してコメント外して動かしてみてください。
#-*- encoding: utf-8 -*- # はてなフォトのRSSを解析するサンプル import urllib2 from lxml import etree # proxyの設定 # 必要であればコメントを外してください。 #proxy = {'http':'http://localhost:8080/'} #proxy_handler = urllib2.ProxyHandler(proxy) #opener = urllib2.build_opener(proxy_handler) #urllib2.install_opener(opener) # はてなフォトのrssのnamespaceの定義 # rssのデフォルトnamespaceも明示 hatenafoto_rss_ns = {"rss":"http://purl.org/rss/1.0/", "rdf":"http://www.w3.org/1999/02/22-rdf-syntax-ns#", "dc":"http://purl.org/dc/elements/1.1/", "content":"http://purl.org/rss/1.0/modules/content/", "hatena":"http://www.hatena.ne.jp/info/xmlns#", "taxo":"http://purl.org/rss/1.0/modules/taxonomy/", "openSearch":"http://a9.com/-/spec/opensearchrss/1.0/" } # 人気写真のURL hatenafoto_url = 'http://f.hatena.ne.jp/hotfoto?mode=rss' r = urllib2.urlopen(hatenafoto_url) if(r.code != 200): exit(0) xml = etree.fromstring(r.read()) # xpathメソッド実行時にnamespacesを指定 # xpathはデフォルトnamespaceについても明に指定する必要あり。 for item in xml.xpath("/rdf:RDF/rss:item",namespaces=hatenafoto_rss_ns): title = item.xpath("./rss:title/text()",namespaces=hatenafoto_rss_ns)[0] midium = item.xpath("./hatena:imageurlmedium/text()",namespaces=hatenafoto_rss_ns)[0] org = item.xpath("./hatena:imageurl/text()",namespaces=hatenafoto_rss_ns)[0] print title,midium,org