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

python:lxml:xpathサンプル のバックアップの現在との差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*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