Hatena::ブログ(Diary)

Magical Diary このページをアンテナに追加 RSSフィード

2011年08月18日

Titanium Mobileでスクレイピング

Titanium Mobileウェブサイトスクレイピングする方法を考えてみた。ターゲットとなるサイトは (XMLではない) 普通HTMLエンコードShift_JIS

  1. Titanium.Network.HTTPClient + Titanium.XML.DOMDocument → 整形式なXMLかつUTF-8じゃないとダメ。多分。
  2. NSXMLDocument を呼び出すモジュールを作成する → Macプロトタイプを作ってXCodeに持っていったらエラーiPhoneではNSXMLParser (SAX) しかサポートしないようだ。orz モジュール作成勉強になったからよしとする。
  3. libxml2 → iPhoneアプリではよく使われているようなので、多分問題無い。JavaScript, Objective C, C のコードが混在するのが気持ち悪い。(cf. Cocoa with Love: Using libxml2 for XML parsing and XPath queries in Cocoa)
  4. 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) を使えば簡単に取り出せそうだ。

Yahoo! Query Language - YDN

(はてなブックマークより。thanks to: id:tittea)

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/hirata_yasuyuki/20110818/titanium_scraping