WebViewとJavaScriptを使ったスクレイピング

2,065 views
Skip to first unread message

keigoi

unread,
Feb 11, 2010, 8:49:20 AM2/11/10
to 日本Androidの会, keigo...@gmail.com
こんにちは、はじめまして。今井(keigoi)と申します。

AndroidでJavaScriptを使ってスクレイピングするという記事を書きました。
http://android.g.hatena.ne.jp/keigoi/20100211/1265892976
AndroidでWebページをスクレイピングをするという需要はそれなりにあると考えています(Webメールの受信など)。

このコードはWebViewをService上で動かしているのですが、このような(ViewをServiceで動かす)コードはAndroid的には
NGだったような気もします。
が、それなりにhandy(のように見える)ので、できればこの方法を使って色々なスクレイピングをしたい。

どなたか、似たようなコード(ViewをServiceで動かす)をご存知の方はいらっしゃいます?
もしくは、このコードが妥当かどうか、なにかしらの知見をお持ちのかたはいらっしゃいますか?
ヒントでも嬉しいです。

以上、よろしくおねがいします。

Daisuke Miyakawa

unread,
Feb 11, 2010, 4:12:37 PM2/11/10
to android-g...@googlegroups.com, keigo...@gmail.com
みやかわです。

お話を根底から覆してしまうかもしれませんが、ご参考のために。。。

あくまでアイディアですが、くらうどこんぴゅーてぃんぐ、を利用されてはいかがでしょうか =)
具体的には、GAEかEC2などでスクレイプさせてシンプルなフォーマットにしておき、
Android端末はそのシンプルなフォーマットを取ってきてそのまま表示するか、好きなように加工しておくということです。

Android端末は携帯の帯域幅の制約やCPU速度の制約上、あまりローカルにデータを持ってきてデータを加工するのには向いてないかな、
と個人的には思っています。

> AndroidでWebページをスクレイピングをするという需要はそれなりにあると考えています(Webメールの受信など)。
Webメール側で簡単にパース出来る構造化されたXMLを提供していないのであれば
- おとなしくAndroidで加工する
- くらうどこんぷーてんぐ を用いて加工して、Androidでは加工済の用意に読み取り可能なxmlを受け取る
の二案があるのではないかなー、ということです。

あくまで選択肢ですので、色々試していただければと思います。

#ちなみに私はクラウドコンピューティングという言葉があまり好きではないので上では変な書き方をしています。ごめんなさい

それでは。

2010年2月11日22:49 keigoi <keigo...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




--
Daisuke Miyakawa (宮川大輔)
d.miy...@gmail.com

Keigo Imai

unread,
Feb 11, 2010, 4:48:31 PM2/11/10
to Daisuke Miyakawa, android-g...@googlegroups.com, keigo.imai
みやかわさま

早速のご返信ありがとうございます。
おっしゃる通り、リソースの制約がきつい端末は
スクレイピングには不向きと思います。

ただ、クラウド等の中間サーバーを経由しないアーキテクチャは
よりシンプルで、スクレイピングの発想
(ちょっとしたデータの取得加工をイージーに自動化する)
に合っていると思います。

また、パスワードやメール内容といった個人情報の取得に
第三者のサーバーを経由するのはあまりよろしくない
かもしれません。

> Webメール側で簡単にパース出来る構造化されたXMLを提供していないのであれば
> - おとなしくAndroidで加工する
> ...
> の二案があるのではないかなー、ということです。

WebViewを使えばAndroidで簡単に加工できるよ、というお話のつもりでした。
もし分かりにくければ申し訳なかったです。

ご意見参考になります。ありがとうございました。
それでは。

2010/2/12 Daisuke Miyakawa <d.miy...@gmail.com>:

> Daisuke Miyakawa (宮川大輔)
> d.miy...@gmail.com
>

--
Keigo IMAI (今井 敬吾)
mail 1 : keigo...@gmail.com
mail 2 : im...@nagoya-u.jp
www : http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/

Daisuke Miyakawa

unread,
Feb 11, 2010, 5:13:29 PM2/11/10
to Keigo Imai, android-g...@googlegroups.com
今井さん

丁寧なご返答ありがとうございます。
こちらこそKY的な返答で申し訳ないです。

当方、ServiceでViewを使ってよいかについては不案内なので何もお伝え出来ず申し訳ないのです。

ぱっと思いつきでは、
- Android内でHTML加工を行うActivityを一層通し、次のActivityで加工済のHTMLを見る
というのはある「かも」しれませんが、WebViewがローカルのファイルを閲覧可能なのかすら存じあげないので「可能なら」の前提付きです。

あくまでご参考までに。。。

#こんな早朝だと他の方の返答を期待出来ない。。。

2010年2月12日6:48 Keigo Imai <keigo...@gmail.com>:

まいむぞう

unread,
Feb 11, 2010, 10:15:16 PM2/11/10
to android-g...@googlegroups.com
まいむぞうです。

まさしく同じアーキテクチャで作っていたので、勢い余ってブログに書きました。
http://fromnorth.blogspot.com/2010/02/webview.html

こちらにはまとめだけ書いておきます。詳細はブログ参照ください。

・やんちゃなページを相手にスクレイピングを仕掛けたいならWebViewに限る
・とくにAjaxなヤツを相手にするなら現状WebView以外の選択肢は無いように思える
・でもこいつはクセが強いぞ。心して掛かれ


以下戯言
NDK使って、WebKitの文字コード推定&コンバートとHTMLパーサ部分だけを使うJNIを標準ライブラリに欲しいっス!
(とここに書いておけばGooglerな方が良きに計らってくれるはず)

あと、マルチタスク可能なAndroidにとって、Serviceってかなりキーになると思うんですけど、
Serviceが殺されたり、殺されたServiceがActivityManagerから起こされたり、
起こされた後平然と仕事を続けたりするあたりのノウハウが共有されてない(足りない)気がしました。
こういった場合は、このライフサイクルイベントが呼ばれるけど、こっちの場合は呼ばれない、など。

# そういった意味で、青本と「コードからわかるAndroidプログラミングのしくみ」は貴重でした

------------------------------------------------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail: mai...@gmail.com
skype: maimuzo
twitter: maimuzo
blog: http://fromnorth.blogspot.com/
service for rubyist: http://gemspec.info
for Android users: http://www.android-app.info/
------------------------------------------------------------------------------------------------------

2010年2月12日7:13 Daisuke Miyakawa <d.miy...@gmail.com>:

keigoi

unread,
Feb 12, 2010, 4:06:34 AM2/12/10
to 日本Androidの会, keigo.imai
まいむぞうさま

ありがとうございます。

> ・やんちゃなページを相手にスクレイピングを仕掛けたいならWebViewに限る

Javaオンリーでも結構いけます。 当初言ってたことと矛盾するようですが (^^;

実のところ、私も当初は スクレイピングを Javaで書いてました。
- HTTP接続には HttpClient を,
- HTMLパーザには jericho[1] を,
- 解析には jaxen[2] で XPath
を使っていました。
普通にやるならこちらのほうがパフォーマンス的には優れています(おそらく)し、
非XHTMLやある程度不正なHTMLも受け付けるようです(jerichoのおかげ)。
そのうちコードは公開します。

ただやはり WebKitが使えれば嬉しいのは
- 解析部分はJavaScriptで書ける
 ・簡単、短い (リダイレクト、sslや認証への対応がほぼ不要,
  絶対URLの計算が不要, Javaよりも簡潔な言語, etcetc..)
 ・ブラウザ上で叩くだけでカジュアルに開発できてしまう
 ・スクリプトなので解析部分のみ後から差し替え可能
- Ajax 対応
- V8 が導入されたら高速になる?
という点でしょうか.
(最初の1つは適当なライブラリを拾うか作るかしてしまえば苦にならないと思いますが)

あとはみやかわさんが仰ったことに近いですが、
WebView でページを保存したあとでオフラインで閲覧できたりすれば、
それも嬉しそうです。
実際、WebView はローカルのファイルを閲覧できます[3]が、
ロードしたページを画像CSS込みで保存したりというのはできるかどうかわかりませんが…

> あと、マルチタスク可能なAndroidにとって、Serviceってかなりキーになると思うんですけど、
> ...


> # そういった意味で、青本と「コードからわかるAndroidプログラミングのしくみ」は貴重でした

すごく参考になります!
ありがとうございます。

[1] jericho http://jericho.htmlparser.net/docs/index.html
[2] jaxen http://jaxen.codehaus.org/
[3] http://android-developers.blogspot.com/2008/09/using-webviews.html

On Feb 12, 12:15 pm, まいむぞう <maim...@gmail.com> wrote:
> まいむぞうです。
>
> まさしく同じアーキテクチャで作っていたので、勢い余ってブログに書きました。http://fromnorth.blogspot.com/2010/02/webview.html
>
> こちらにはまとめだけ書いておきます。詳細はブログ参照ください。
>
> ・やんちゃなページを相手にスクレイピングを仕掛けたいならWebViewに限る
> ・とくにAjaxなヤツを相手にするなら現状WebView以外の選択肢は無いように思える
> ・でもこいつはクセが強いぞ。心して掛かれ
>
> 以下戯言
> NDK使って、WebKitの文字コード推定&コンバートとHTMLパーサ部分だけを使うJNIを標準ライブラリに欲しいっス!
> (とここに書いておけばGooglerな方が良きに計らってくれるはず)
>
> あと、マルチタスク可能なAndroidにとって、Serviceってかなりキーになると思うんですけど、
> Serviceが殺されたり、殺されたServiceがActivityManagerから起こされたり、
> 起こされた後平然と仕事を続けたりするあたりのノウハウが共有されてない(足りない)気がしました。
> こういった場合は、このライフサイクルイベントが呼ばれるけど、こっちの場合は呼ばれない、など。
>
> # そういった意味で、青本と「コードからわかるAndroidプログラミングのしくみ」は貴重でした
>
> --------------------------------------------------------------------------- ---------------------------
> 大路裕介(おおみちゆうすけ)/まいむぞう

> mail: maim...@gmail.com


> skype: maimuzo
> twitter: maimuzo
> blog:http://fromnorth.blogspot.com/
> service for rubyist:http://gemspec.info
> for Android users:http://www.android-app.info/
> --------------------------------------------------------------------------- ---------------------------
>

> 2010年2月12日7:13 Daisuke Miyakawa <d.miyak...@gmail.com>:


>
>
>
> > 今井さん
>
> > 丁寧なご返答ありがとうございます。
> > こちらこそKY的な返答で申し訳ないです。
>
> > 当方、ServiceでViewを使ってよいかについては不案内なので何もお伝え出来ず申し訳ないのです。
>
> > ぱっと思いつきでは、
> > - Android内でHTML加工を行うActivityを一層通し、次のActivityで加工済のHTMLを見る
> > というのはある「かも」しれませんが、WebViewがローカルのファイルを閲覧可能なのかすら存じあげないので「可能なら」の前提付きです。
>
> > あくまでご参考までに。。。
>
> > #こんな早朝だと他の方の返答を期待出来ない。。。
>

> > 2010年2月12日6:48 Keigo Imai <keigo.i...@gmail.com>:


>
> >> みやかわさま
>
> >> 早速のご返信ありがとうございます。
> >> おっしゃる通り、リソースの制約がきつい端末は
> >> スクレイピングには不向きと思います。
>
> >> ただ、クラウド等の中間サーバーを経由しないアーキテクチャは
> >> よりシンプルで、スクレイピングの発想
> >> (ちょっとしたデータの取得加工をイージーに自動化する)
> >> に合っていると思います。
>
> >> また、パスワードやメール内容といった個人情報の取得に
> >> 第三者のサーバーを経由するのはあまりよろしくない
> >> かもしれません。
>
> >> > Webメール側で簡単にパース出来る構造化されたXMLを提供していないのであれば
> >> > - おとなしくAndroidで加工する
> >> > ...
> >> > の二案があるのではないかなー、ということです。
>
> >> WebViewを使えばAndroidで簡単に加工できるよ、というお話のつもりでした。
> >> もし分かりにくければ申し訳なかったです。
>
> >> ご意見参考になります。ありがとうございました。
> >> それでは。
>

> >> 2010/2/12 Daisuke Miyakawa <d.miyak...@gmail.com>:


> >> > みやかわです。
>
> >> > お話を根底から覆してしまうかもしれませんが、ご参考のために。。。
>
> >> > あくまでアイディアですが、くらうどこんぴゅーてぃんぐ、を利用されてはいかがでしょうか =)
> >> > 具体的には、GAEかEC2などでスクレイプさせてシンプルなフォーマットにしておき、
> >> > Android端末はそのシンプルなフォーマットを取ってきてそのまま表示するか、好きなように加工しておくということです。
>
> >> > Android端末は携帯の帯域幅の制約やCPU速度の制約上、あまりローカルにデータを持ってきてデータを加工するのには向いてないかな、
> >> > と個人的には思っています。
>
> >> >> AndroidでWebページをスクレイピングをするという需要はそれなりにあると考えています(Webメールの受信など)。
> >> > Webメール側で簡単にパース出来る構造化されたXMLを提供していないのであれば
> >> > - おとなしくAndroidで加工する
> >> > - くらうどこんぷーてんぐ を用いて加工して、Androidでは加工済の用意に読み取り可能なxmlを受け取る
> >> > の二案があるのではないかなー、ということです。
>
> >> > あくまで選択肢ですので、色々試していただければと思います。
>
> >> > #ちなみに私はクラウドコンピューティングという言葉があまり好きではないので上では変な書き方をしています。ごめんなさい
>
> >> > それでは。
>

> >> > 2010年2月11日22:49 keigoi <keigo.i...@gmail.com>:


>
> >> >> こんにちは、はじめまして。今井(keigoi)と申します。
>
> >> >> AndroidでJavaScriptを使ってスクレイピングするという記事を書きました。
> >> >>http://android.g.hatena.ne.jp/keigoi/20100211/1265892976
> >> >> AndroidでWebページをスクレイピングをするという需要はそれなりにあると考えています(Webメールの受信など)。
>
> >> >> このコードはWebViewをService上で動かしているのですが、このような(ViewをServiceで動かす)コードはAndroid的には
> >> >> NGだったような気もします。
> >> >> が、それなりにhandy(のように見える)ので、できればこの方法を使って色々なスクレイピングをしたい。
>
> >> >> どなたか、似たようなコード(ViewをServiceで動かす)をご存知の方はいらっしゃいます?
> >> >> もしくは、このコードが妥当かどうか、なにかしらの知見をお持ちのかたはいらっしゃいますか?
> >> >> ヒントでも嬉しいです。
>
> >> >> 以上、よろしくおねがいします。
>
> >> > --
> >> > Daisuke Miyakawa (宮川大輔)

> >> > d.miyak...@gmail.com


>
> >> --
> >> Keigo IMAI (今井 敬吾)

> >> mail 1 : keigo.i...@gmail.com
> >> mail 2 : i...@nagoya-u.jp


> >> www :http://www.agusa.i.is.nagoya-u.ac.jp/person/sydney/
>
> > --
> > Daisuke Miyakawa (宮川大輔)

> > d.miyak...@gmail.com

Reply all
Reply to author
Forward
0 new messages