python:lxml:xpathサンプル のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- python:lxml:xpathサンプル へ行く。
- 1 (2012-07-06 (金) 01:29:37)
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