RubyScraping

4,633 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
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,633
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
131
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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がトップに来る(^^;

×