2011年08月18日
■Titanium Mobileでスクレイピング
Titanium Mobile でウェブサイトをスクレイピングする方法を考えてみた。ターゲットとなるサイトは (XMLではない) 普通のHTML、エンコードは Shift_JIS。
- Titanium.Network.HTTPClient + Titanium.XML.DOMDocument → 整形式なXMLかつUTF-8じゃないとダメ。多分。
- NSXMLDocument を呼び出すモジュールを作成する → Macでプロトタイプを作ってXCodeに持っていったらエラー。iPhoneではNSXMLParser (SAX) しかサポートしないようだ。orz モジュール作成の勉強になったからよしとする。
- libxml2 → iPhoneのアプリではよく使われているようなので、多分問題無い。JavaScript, Objective C, C のコードが混在するのが気持ち悪い。(cf. Cocoa with Love: Using libxml2 for XML parsing and XPath queries in Cocoa)
- webView + evalJS → 今回やって上手く動いた。外部モジュールやライブラリを使わずに動くので、一番楽かもしれない。
コード
var url = "http://www.akaneshinsha.co.jp/online/comics-shinkan/shinkan-top.htm"; var webView = Titanium.UI.createWebView({url: url}); webView.addEventListener("load", function(p) { this.evalJS('alert("あずにゃんペロペロ");'); var title = this.evalJS('document.evaluate("//title", document, null, XPathResult.STRING_TYPE, null).stringValue'); Titanium.API.info("title = " + title); var count = this.evalJS('document.evaluate("count(//body/div[6]/table//tr)", document, null, XPathResult.NUMBER_TYPE, null).numberValue'); Titanium.API.info("count = " + count); for(var i = 3; i < count - 1; i++) { var td = this.evalJS('document.evaluate("//body/div[6]/table//tr[' + (i + 1) + ']/td[3]//font/text()", document, null, XPathResult.STRING_TYPE, null).stringValue'); Titanium.API.info("[" + i + "] = " + td); } }); win1.add(webView); /* // 本番ではwebViewを隠す方が良いかも? var blind = Titanium.UI.createWindow({ title:'aaa', backgroundColor:'#fff' }); webView.add(blind); */
実行結果
[INFO] title = 茜新社 単行本 コミックス 今月の新刊 [INFO] count = 13 [INFO] [3] = COMIC 天魔 2011年9月号 [INFO] [4] = COMIC RIN 2011年9月号 [INFO] [5] = 熟女ものがたり 2011年10月号 [INFO] [6] = COMIC LO 2011年10月号 [INFO] [7] = comic Sigma vol.60 [INFO] [8] = ただし二次元に限る [INFO] [9] = のらシス [INFO] [10] = TAKAMICHI SUMMER WORKS [INFO] [11] = OPERA vol.28 - Kiss-
そろそろLOの発売日か…
追記
Yahoo! Query Language (YQL) を使えば簡単に取り出せそうだ。
(はてなブックマークより。thanks to: id:tittea)
トラックバック - http://d.hatena.ne.jp/hirata_yasuyuki/20110818/titanium_scraping
リンク元
- 6962 http://pipes.yahoo.com/pipes/pipe.info?_id=3eebace824bb60a10f13c841c2c64478
- 211 http://www.google.co.jp/url?sa=t&rct=j&q=縺輔¥繧益ps smtp&source=web&cd=1&ved=0CC8QFjAA&url=http://d.hatena.ne.jp/hirata_yasuyuki/20101003/sakura_trial_mail&ei=4R6FTu60HurymAWK7dn2Dw&usg=AFQjCNEX5OIcH_xqVmvsW5YIDJ1H02TyXg&
- 170 http://devslog.com/article/20111213224528.html
- 115 http://yasu.asuka.net/
- 92 http://tatsuya.info/wp
- 92 http://www.multiburst.net/sometime-php
- 81 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331195868630&ved=0CFEQFjAA&url=http://d.hatena.ne.jp/hirata_yasuyuki/20101003/sakura_trial_mail&ei=WG9YT8m1LeigmQXDm4S_Dw&usg=AFQjCNEX5OIcH_xqVmvsW5YIDJ1H02TyXg
- 77 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CC0QFjAB&url=http://d.hatena.ne.jp/hirata_yasuyuki/20101003/sakura_trial_mail&ei=7pVAT_PdHMrFmQWlyvisBw&usg=AFQjCNEX5OIcH_xqVmvsW5YIDJ1H02TyXg
- 66 http://kaju.jp/2011/01/post-1508.php
- 37 http://www.google.co.jp/url?sa=t&rct=j&q=シェル for 連番&source=web&cd=2&ved=0CCQQFjAB&url=http://d.hatena.ne.jp/hirata_yasuyuki/20110104/sequential_numbers&ei=ZwyyTuniC4XXmAXj6c2UAg&usg=AFQjCNG8ONz24Aw4Y
