トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

python:lxml:xpathサンプル のバックアップ(No.1)


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