rubyでする Web scrapping - Hpricot と mechanize そして scRubyt (朴 芝印)

スピーカー
朴 芝印 - 延世大学化学工学科, 韓国 ruby-forum - forum.rubykr.org
プロフィール
- Ruby好きの大学生。
- Programming Rubyの韓国語版の翻訳。
講演時間
16:00〜16:30
講演者による資料
page: http://tisphie.net/typo/pages/RubyKaigi2007
PDF: http://tisphie.net/web-scraping.pdf

韓国の方ですが、とても日本語が上手で聞きやすかったです。

緊張しています^^

rubykaigi_some4.jpg

Rubyでやってること

  • Rubyで自分のためのユーティリティを書いたりしています。
  • Programming Ruby韓国語版の翻訳(拍手)

Web Scrapingて何?

ウェブページ
 ↓
何か(←いまここ)
 ↓
XMLとかテキストとか

作ってみよう!

  • open-uri
  • 文字列処理
  • 正規表現
  • read/puts/gets

デモプログラムをirbで実行

  • 正規表現でグーグルの検索結果を抽出して出力するプログラム

面倒臭くない?

  • 正規表現書いたりするのが面倒臭い
  • 特に行が変わったりするときびしい

そこでHpricot

  • XPathでHTMLの一部を抽出する
  • プログラムはさっきのと同じ結果を返す

Hpricot

  • why the lucky stiff 製作
  • Pythonの何とかというやつより速かった

XPath

  • XMLツリー構造を表現

ここでデモ

doc = Hpricot(html)
(doc/"/html/body/div/a").inner_text

みたいに使う

FireBug

  • GoogleのHTMLそのままソース表示でみると分かりにくい
  • FirefoxでFireBugのInspectにcopy XPath というメニューが

CSS selector

  • XPathより短く、読みやすい
doc.search('#menu')

みたいにできるお

HTTPを操る

  • open-uri
  • 複雑な場合Net::HTTP
  • Mechanize

Mechanize

  • PerlのWWW::Mechanizeからの影響
  • Michael Newman & Aaron Paterson製作
  • 内部ではNet::HTTPを利用している

Mechanizeの動作

  • HTTP request
  • 返事によりredirectなどの処理
  • Cookieも処理できる

yahooにログインするサンプルをしてました。

scRUBYt

  • Web Extractionのためのライブラリ
  • MechanizeとHpricotを利用する
  • DSL記法
  • 今も活発に開発中

sample

Googleの検索結果を次のページまでみるサンプルを披露しました

でも、サンプルの実行にちょっととまどった

require 'rubygems'
require 'scrubyt'

したらできた。

ネット重い…

scRUBYtはDSLからRubyプログラムを生成しているらしいです。

応用

  • 2ch掲示板に連続書き込む

(爆笑)

よい大人はまねしちゃいけません

まじめなまとめ

  • rssがないサイトのrssをつくるスクリプト
  • サーチエンジン…(ごめんなさいログ追いつかず)

ライブラリのインストールはGemでおk

Last modified:2007/06/16 15:06:15
Keyword(s):
References:[RubyKaigi2007速報ログ]

Login