894159 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

鶏が口だけでも飛び立ちます

鶏が口だけでも飛び立ちます

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Keyword Search

▼キーワード検索

Profile

Solis

Solis

Calendar

Comments

effelpist@ kilovermek.es effelpist <a href="https://kilovermek.es/…
http://buycialisky.com/@ Re:TinyURLのようなRedirectionの仕組み(06/30) viagra cialis predamdiferencias entre e…
http://viagraiy.com/@ Re:TinyURLのようなRedirectionの仕組み(06/30) cialis viagra ou levita <a href=&qu…
ジャピーノ@ フィリピンペソなど興味無し 日本でビジネスの手腕が発揮できない者は…
KJN@ MagpieRSSでRSSをHTMLに展開する方法を教えてください。 こんにちは! 最近はwordpressを使って、…
とおりすがり@ たしかに・・・。 この会社の社長さんはすばらしいかたです…
どぴゅ@ みんなホントにオナ鑑だけなの? 相互オナって約束だったけど、いざとなる…
お猿@ やっちまったなぁ! http://feti.findeath.net/rue-oo1/ ちょ…
もじゃもじゃ君@ 短小ち○こに興奮しすぎ(ワラ 優子ちゃんたら急に人気無い所で車を停め…
リナ@ 今日は苺ぱんちゅ http://kuri.backblack.net/ps82ouo/ 今…

Recent Posts

Archives

2024.10
2024.09
2024.08
2024.07
2024.06
2024.05
2024.04
2024.03
2024.02
2024.01

Category

Favorite Blog

偶然と誤解 New! にわとりのあたまさん

遍路と農業とFXの… おばか社長さん
田舎で!情報起業 … 田舎っぽ こと 関根雅泰さん
パンラヤー(妻)は… samo1965さん
アサワ(妻)はフィ… マハルナさん
     さ.ゆ.り.… さゆり1995さん
2008.05.02
XML
カテゴリ:カテゴリ未分類

未踏の開発が未完成に終わったのは、、、サーバーで動くブラウザのようなものを作っていたのに時間を割いてしまったというのがあります。

テーマがスクレイピングだったので、いろいろなサイトにアクセスしてWebページにアクセスするということをするプログラムを書く必要がありました。

スクレイピングのレベルというのがあります(勝手につけちゃいました) 

  1. wgetやcurlを使う
  2. httpアクセスを行うライブラリを使ったプログラムを書く
  3. cookieなどを操作してくれるエミュレータを使う
  4. httpアクセスの便利なエミュレーターを使う

1. 最初にスクレイピングのプログラムを作ろうとした時は、wgetやcurlというUNIXコマンドを使いました。

どちらも wget http://www.abc.com/ のような感じで実行すれば、指定のWebページをダウンロードできます。

そのページがBasic認証がある場合(ブラウザのダイアログで要求されることがある)でも、オプションでユーザーIDとパスワードを指定すれば取り出すことが可能です。

ただこれは一回きりのコマンドなので、ページのリンクをたどったり、フォームにユーザーIDとパスワードを入れる場合は使えません。

2. 次は、PerlやRubyなどの言語を使って、同じようなことをします。

まずはRubyですと、'net/http'というライブラリを使ってサンプルプログラムを実行するところから始めます。プログラムなので、一連の操作でいろいろなデータを取り出すことができるようになります。ただ、面倒な処理をしなくてはいけないので、何かライブラリをないか探しました。

3. Perlにはmechanizeというライブラリを使うと便利です。Rubyではスクレイピングを始めるときそのライブラリはなく、http-access2というのがありました。Cookieを扱ってくれて便利でした。

ただできないことがいくつかありました。httpアクセスのときに、受け取るファイルを圧縮して受け取るオプションがありません。自分でつくったりしました。^^; ただ分割で受け取る時は不便なので、、、そうかブラウザ側で「圧縮で受け取らないよ」と言えばいいんだと気付きました。

4. Rubyではscrubytというのが、mechanizeとhpricotというライブラリを吸収して便利だとうたっていました。確かに!でも、私のプログラムをブラウザのふりをすることで、普通の人がアクセスするのと同じように動くことを真似していました。

スクレイピングというのは、法的にグレーのところがあります。グレーの部分は著作権のあるデータを他の人に見せてはいけないところです。私は個人で使うためにするのだからいいのだろうと思いますが、Webサイトによってはプログラムでアクセスしてはいけないという但し書きがある場合があります。

その部分はアウトですが、人が意図してやることを代理で行うことなので、、、、、、それ以上は言及しません。エジソンが電信機を毎晩自動で打信するということを思い出します。

 

このところで、Webサイト側がプログラムが自動的にやらないようにしているところが多いことに気付きました。

多くはスパム防止のためです。メッセージを書き込むときにCAPCHA認証というのがありまして、人間しか読めない図形を読ませてそれを入力させて、人間かプログラムかの差別化をするものです。

他にはJavaScriptを使って、動的にWebページを書いたり、ログインするときもJavaScriptを使う場合がありました。これも人間にとっては問題ありませんが、プログラムにとっては問題です。

 

特定のWebサイトを対象にプログラムを書くことは可能ですが、どこのページでもプログラムで処理するのは大変なことです。CAPCHA認証は簡単なものから複雑なものまであり、簡単なものだったら図形認識のプログラムを書けばいいでしょう。

図形を読み取り、そのベクター抽出をして、A-Z, a-z, 0-9のどれかの図形のベクターと似ているか比較すればいいのです。文字を湾曲させたり、文字の上に網をかけてベクター抽出をしにくくしたり、単色ではなくてグラデーションで画像をとりにくくしたり、いろいろ考えています。ただ複雑になりすぎると人間が読めなくなるので、そのバランスが難しいです。文脈を理解するのはAIでも難しいので、簡単なクイズの方がいいかもしれません。

 

横道がそれましたが、結局未踏でそのブラウザもどきをつくるので時間をかけすぎました。scrubytやmechanizeなどのライブラリを使うと、そのライブラリにない処理ができないと困りました。自分でライブラリを作るか、そのライブラリを改良して独自のものにするか。最終的には、Rubyという言語が既存のライブラリを変えずにメソッドを再定義することが可能なので、ライブラリのメソッドをいくつか再定義してバグ修正や機能追加をしました。

でも、サイトのスパム対策と争うのはやめました。

これで2、3か月の時間を費やしてしまったのですが、たぶんスクレイピングのプログラムを作ろうとしているところは同じことをしているんだと思います。未踏で一緒だったTさんに教えていただいたのですが、サーバーサイドのスクレイピングプログラムを作っているある会社は、JavaScriptの部分まで作りこんでいるとか、御見それしました。

私も、Javaで作っているオープンソースのブラウザを調べて、画面に表示する部分を省けば同じものを作れるかなと思いましたが、それをやるだけでも大変なことだなと思います。

 

結局、ここまで無理をしたのですが、クライアントサイドでスクレイピングをすればこんな簡単なことはありませんでした。

先日、RubyのWatirというライブラリを使って、RubyからInternet Explorerをコントロールしながら動かすプログラムに改良したのですが、あっという間に終わってしまいました。

あっ、そうか、こんなことならば、Windows 2003 serverで、IEをユーザーごとに動かす力技でスクレイピングプログラムを作ればよかったのか、、、、画面表示する(レンダリング)部分などが遅いけれども、もっと大切なところでやればよかったのに。

 

いまとなっては、あそこで苦労したことも一つの貴重な体験ですが、時間やリソースが限られているので、何を捨てて何を生かすかということが大切だと思います。口で言うのは簡単ですが、なかなか難しいことです。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2008.05.04 01:59:52
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X