• Like
  • Save
  • Private Content
Rubyで始めるWebスクレイピング
 

Rubyで始めるWebスクレイピング

on

  • 4,724 views

Rubyで始めるWebスクレイピング

Rubyで始めるWebスクレイピング
第1回Webスクレイピング勉強会@東京 発表資料

Statistics

Views

Total Views
4,724
Views on SlideShare
2,320
Embed Views
2,404

Actions

Likes
19
Downloads
25
Comments
0

13 Embeds 2,404

http://cashew.hatenablog.com 1316
http://blog.takuros.net 690
http://tokyoscrapper.connpass.com 164
http://blog.negativemind.com 88
https://twitter.com 66
http://feedly.com 38
http://blog.hatena.ne.jp 24
http://s.deeeki.com 12
http://www.slideee.com 2
https://www.chatwork.com 1
http://localhost 1
https://kcw.kddi.ne.jp 1
http://reader.aol.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Rubyで始めるWebスクレイピング Rubyで始めるWebスクレイピング Presentation Transcript

    • 第1回Webスクレイピング勉強会@東京 ! Rubyで始める Webスクレイピング 2014年6月22日 @dkfj 佐々木拓郎
    • 今日は大阪から来ました
    • ✦ プロフィール ‣ Webシステムを得意とするSIerで勤務 ‣ 最近の仕事はAWS事業の推進・インフラチームのマネジメント ‣ Webスクレイピングして、データマイニングするのが趣味 ★ ソーシャル・ネットワーク ‣ blog: http://blog.takuros.net/ ‣ twitter: @dkfj ‣ Facebook: takuro.sasaki ‣ SlideShare: http://www.slideshare.net/takurosasaki/ @dkfj 自己紹介: 佐々木拓郎
    • 宣伝!! Rubyのクローラー本を書いています。 8月頃に発売予定です。
    • Rubyで Webスクレイピングするには?
    • RubyでWebスクレイピング • Open-URI • Nokogiri • Anemone • Capybara+Selenium • cosmiccrawler • CocProxy 基本的なライブラリ クローラー フレームワーク 補助的なライブラリ
    • Open-URI • http/ftpに簡単にアクセスするためのライブラリ • Kernel#openを再定義 • ファイルのopenと同様に、URLを扱える require 'open-uri' open("http://www.ruby-lang.org/") {¦f¦ f.each_line {¦line¦ p line} }
    • • HTML/XMLの構文解析器(パーサー) • ほぼデファクトスタンダード • XPath or CSSセレクタで、HTML中の要素を選択 • UTF-8以外の文字コードを扱う場合は注意 require 'nokogiri' require 'open-uri' ! doc = Nokogiri.HTML(open("http://nokogiri.org/")) doc.css('a').each do ¦element¦ puts element[:href] end 参照:Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath http://blog.takuros.net/entry/2014/04/15/070434
    • • Ruby製のクローラーフレームワーク • データ収集/解析/保存の全ての機能がある • 2年ほどメンテナンスされていない • ScrapyのあるPythonがうらやましい今日この頃 require 'anemone' ! Anemone.crawl("http://www.hatena.ne.jp/") do |anemone| anemone.on_every_page do |page| puts page.url puts page.doc.xpath("//head/title/text()").first.to_s if page.doc end end Anemone 参照:オープンソースのRubyのWebクローラー"Anemone"を使ってみる http://blog.takuros.net/entry/20110204/1296781291
    • • 基本的には、UIテストツール • ブラウザを使うので、JavaScriptにも対応可能 • スクレイピング部分は、Nokogiriを利用 • CapybaraをラッパーしたMasqueというクローラー • ブラウザ代わりに、PhantomJSを使うのもあり Capybara+Selenium 参照:Capybara-DSLのはなし http://blog.takuros.net/entry/20140322/1395464375 参照:JavaScriptにも対応出来るruby製のクローラー、Masqueを試してみる http://blog.takuros.net/entry/20131223/1387814711
    • • 並列処理を得意とするクローラー • 並列処理の実装は、EventMachine • EventMachineの面倒くさい処理を隠蔽してくれる cosmicrawler 参照:複数並行可能なRubyのクローラー、「cosmicrawler」を試してみた http://blog.takuros.net/entry/20140103/1388701372 require 'cosmicrawler' ! Cosmicrawler.http_crawl(%w(http://b.hatena.ne.jp/hotentry/it http:// b.hatena.ne.jp/hotentry/life)) {|request| get = request.get puts get.response if get.response_header.status == 200 }
    • • ほぼピュアRubyで実装されたプロキシサーバ • 開発用途で、クローラー作成時に便利 • 訪問済みのサイトをキャッシュしてくれる • 訪問先サイトに無駄に負荷を掛けずに試行錯誤できる CocProxy 参照:開発用プロキシ、「CocProxy」が便利 http://blog.takuros.net/entry/2014/05/05/120747
    • スクレイピングの例
    • • iTunesStoreのランキングの実体はHTML+JSON • UserAgentを iTunes にすればスクレイピング可能 • 国ごとのコードをX-Apple-Store-Frontで指定 • カテゴリIDとランキング種別は、引数で指定 iTunesStoreのランキング 参照:iTunesのランキングを毎日自動で取得する その1 http://blog.takuros.net/entry/20120521/1337549653
    • • Webスクレイピングの目的は、データの収集 • APIが提供されているのであれば、そちらが効率的 • ただし、APIは制約が多い ! APIの活用
    • • 1IP辺り1日2,500回のリクエスト制限 • 郵便番号(12万件)を、経度緯度に変換したい • 120,000件/2,500回   48日 • AWSを利用して50台のサーバを使い1時間で完了 ! Google Maps APIの活用 AWSでスポットインスタンスの活用 $0.0031 50台 約16円
    • • 全Tweetのうち、数%だけに絞って提供されている • それでも1日100万件近い分量 • 日本語のみ取り出すことも可能 ! Twitter Streaming API 参照:Rubyのtwitterライブラリで、Twitter Streaming APIが扱えるようになっていた http://blog.takuros.net/entry/2014/05/19/002326
    • 引越にも • 参加表明後に、突然の異動の辞令 • 7月から東京勤務 • 相場観がないので、賃貸サイトをスクレイピング • 数十万件のデータから、駅ごとの㎡辺り単価の算出 ! GeoFUSEで視覚化しようとしたが 時間がなくて断念
    • ご清聴ありがとうございました 後日の質問は、@dkfjまで