- 追加された行はこの色です。
- 削除された行はこの色です。
*python:lxml:xpathサンプル [#jb1ad769]
lxmlのxpathを使うサンプルとして、はてなフォトライフのrssを解析するサンプルを作ってみました。
なんか、namespace周りで躓きそうなところがxsltと一緒でだな、と。
なので、ちょっと残しておこうかな、と。
なんか珍しくソースコードに日本語のコメントを入れているので、詳細はコメントを参照のことw
ちなみに、urllib2使うときによくproxyの設定方法を調べてたので、合わせて書き残すことに。
不要な人は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)
# 必要であればコメントを外してください。
#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