Rubyで作るクローラー Ruby crawler
Upcoming SlideShare
Loading in...5
×
 

Rubyで作るクローラー Ruby crawler

on

  • 1,569 views

 

Statistics

Views

Total Views
1,569
Views on SlideShare
893
Embed Views
676

Actions

Likes
2
Downloads
3
Comments
0

6 Embeds 676

http://blog.takuros.net 589
https://twitter.com 50
http://feedly.com 23
http://www.slideee.com 10
http://s.deeeki.com 3
https://tweetdeck.twitter.com 1

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で作るクローラー Ruby crawler Rubyで作るクローラー Ruby crawler Presentation Transcript

    • 第62回 Ruby/Rails勉強会@関西 ! Rubyで作る クローラー 2014年7月26日 @dkfj 佐々木拓郎
    • 今日は東京の方(埼玉)から来ました https://flic.kr/p/jjvzc7
    • 先月まで大阪に住んでました https://flic.kr/p/iEo2Hp
    • 先月まで大阪に住んでました https://flic.kr/p/iEo2Hp
    • ✦ プロフィール ‣ Webシステムを得意とするSIerで勤務 ‣ 最近の仕事はAWS事業の推進・インフラチームのマネジメント ‣ Webスクレイピングして、データマイニングするのが趣味 ★ ソーシャル・ネットワーク ‣ blog: http://blog.takuros.net/ ‣ twitter: @dkfj ‣ Facebook: takuro.sasaki ‣ SlideShare: http://www.slideshare.net/takurosasaki/ ‣ http://www.justyo.co/TAKUROS/ @dkfj 自己紹介: 佐々木拓郎
    • 主にJAWSUG大阪で活動しています (AWS勉強会)
    • ✦ 正直、初中級者レベル ‣ 2006年くらいから、個人的に使いはじめる ‣ 2009∼10年くらいに業務でRuby On Railsなどを導入 ‣ 以降、自分のチームではRailsを標準に               (でも、自分では余りソース書かず) ‣ AWSのAPI利用で、もっぱら利用 ‣ 2012∼13年くらいにChef, Capistrano関係で再勉強 私とRuby
    • 宣伝!! そんな私ですが、 Rubyのクローラー本を書きました。 8月頃に発売予定です。 Chapter 2 クローラー作成の基礎 Chapter 3 収集したデータを分析する Chapter 4 高度な利用方法
    • クローラーって、 ご存知ですか?
    •  クローラ(Crawler)とは、ウェブ上の文書や画像などを周期 的に取得し、自動的にデータベース化するプログラムである。 「ボット(Bot)」、「スパイダー」、「ロボット」などとも呼 ばれる。  主に検索エンジンのデータベース、インデックス作成に用いら れているほか、統計調査などの目的にも利用される。近年では電 子メールアドレス収集業者などもクローラを利用して、スパムの 送信効率を上げている。 ウィキペディアより
    • と言われても、 よく解らないのでデモ ! Amazonから新刊情報を取得
    • クローラー周りの用語の説明
    • クローラー • Webを巡回するプログラムの総称 • ボット、スパイダー、ロボットなど様々な呼ばれ方がある • 巡回戦略を練るのが一番の仕事 • スクレイピングやストレージの機能を持つことが多い
    • スクレイピング • 取得したHTMLなどから、データを抜き出すこと • 例えば、HTML中のAタグのリンク先を全て取得する • 正規表現派と構文解析派が存在する
    • Rubyでクローラー作成 • Open-URI • Nokogiri • Anemone • Capybara+Selenium • cosmiccrawler • CocProxy
    • Rubyでクローラー作成 • 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 response = get.response if get.response_header.status == 200 doc = Nokogiri::HTML(response) doc.xpath("//a").each do |element| puts element[:href] end ! }
    • • ほぼピュア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
    • • クローラーの目的は、データの収集 • 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
    • 引越にも • 6月中旬に、突然の異動の辞令 • 7月から東京勤務 • 相場観がないので、賃貸サイトをスクレイピング • 数十万件のデータから、駅ごとの㎡辺り単価の算出 ! GeoFUSEで視覚化しようとしたが 時間がなくて断念
    • ご清聴ありがとうございました 後日の質問は、@dkfjまで