Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RubyScraping

4,700 views

Published on

A short presentation about Ruby's scraping library, WWW::Mechanize and Hpricot.
At 'Kansai Open Source 2007' (http://k-of.jp/2007/kof.html)

Published in: Technology
  • Be the first to comment

RubyScraping

  1. 1. RubyScraping Ruby関西 yhara(原 悠)
  2. 2. 自己紹介 yhara (原 悠) 滋賀県在住 所属:京大マイコンクラブ 過去の発表: Plagger meets Ruby 30分でわかるcallccの使い方 Ruby用Webスクレイピングライブラリ、Hpricot
  3. 3. “RubyScraping” Wiki http://mono.kmc.gr.jp/~yhara/rubyscraping/
  4. 4. 「スクレイピング」とは? scrape=引っかく、削り取る Webページから情報を抜き出す技術 便利なライブラリ WWW::Mechanize Hpricot
  5. 5. WWW::Mechanize Web自動巡回ライブラリ
  6. 6. WWW::Mechanize Web自動巡回ライブラリ 例:自動google検索 require 'mechanize' agent = WWW::Mechanize.new page = agent.get(quot;http://www.google.co.jp/quot;) search_form = page.forms.first search_form[quot;qquot;] = quot;Rubyquot; search_results = search_form.submit print search_results.body
  7. 7. 実行結果 googleで”Ruby”を検索した結果のHTMLが 出力される
  8. 8. 解説 手作業で検索するときの動作: (1)トップページを開く (2)検索用フォームを探す (3)検索語句に ”Ruby” と入力 (4)「検索」ボタンを押す Mechanizeならこれを「そのまま」Rubyで書ける!
  9. 9. 解説 (1)トップページを開く→(2)検索用フォームを探す→ (3)検索語句に ”Ruby” と入力→(4)「検索」ボタンを押す require 'mechanize' agent = WWW::Mechanize.new page = agent.get(“http://www.google.co.jp/”) #1 search_form = page.forms.first #2 search_form[“q”] = “Ruby“ #3 search_results = search_form.submit #4 print search_results.body
  10. 10. Hpricot HTML解析ライブラリ
  11. 11. Hpricot HTML解析ライブラリ 例:さっきのgoogle検索結果から、 ヒットしたページのタイトルを全て出力 require quot;hpricotquot; doc = Hpricot(File.read(quot;google.htmlquot;)) (doc/quot;a.lquot;).each do |a| puts a[quot;hrefquot;] puts a.inner_text end
  12. 12. 実行結果
  13. 13. 解説 (doc/quot;a.lquot;) ⇔ <a class=quot;lquot;>…</a> (doc/quot;div#resquot;) ⇔ <div id=quot;resquot;>…</div> CSSセレクタが使える require quot;hpricotquot; doc = Hpricot(File.read(quot;google.htmlquot;)) (doc/quot;a.lquot;).each do |a| puts a[quot;hrefquot;] #=> URL puts a.inner_text #=> ページタイトル end
  14. 14. デモ (時間が余れば)
  15. 15. Googleの広告を消す(^^; require ’rubygems’ require ’hpricot’ require ‘kconv’ html = File.read(“google.html”) #htmlファイルを開く doc = Hpricot(html) #Hpricotオブジェクトを作る #テキストに”DODA”が含まれているtdタグの中身を消す (doc/”td[text()*=DODA]”).empty File.open(“no_ad.html”, “w”){|f| #ファイルに書き戻す f.wirte doc.to_html }
  16. 16. 実行結果
  17. 17. その他の機能 ファイルのアップロード (Mechanize) プロキシ使用(Mechanize) CSSセレクタ (Hpricot) XPath (Hpricot) タグ構造を調べるには、Firefox+FireBugが 便利
  18. 18. 続きはWebで! ご清聴ありがとうございました
  19. 19. おまけ cross-search.rb > ./cross_search.rb Ruby search_by_google: オブジェクト指向スクリプト言語 Ruby search_by_excite: オブジェクト指向スクリプト言語 Ruby search_by_yahoo: オブジェクト指向スクリプト言語 Ruby search_by_msn: Rubyリファレンスマニュアル - Enumerable なぜかMSNサーチだけリファレンスのEnumerableがトップに来る(^^;

×