Anemoneクローラー入門
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Anemoneクローラー入門

on

  • 109 views

 

Statistics

Views

Total Views
109
Views on SlideShare
79
Embed Views
30

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 30

http://local.eventdots.jp 26
http://dev.eventdots.jp 4

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

Anemoneクローラー入門 Presentation Transcript

  • 1. Anemoneによる クローラー入門 中野 佑 1
  • 2. About me 中野 佑(ナカノ タスク) こう見えて22歳(新卒1年目) 株式会社フィードフォース エンジニア ※決して怪しい者では  ございません 2
  • 3. 参考書 • 「Rubyによるクローラー開発  技法」 • 参考にさせていただきました • 入門から応用までわかりや すく解説が載っていました 3
  • 4. まずは… 4
  • 5. クローラーについて 5
  • 6. クローラー VS スクレイピング 6
  • 7. スクレイピングとは • Webページを解析してデータを抽出すること • HTMLを解析(parse)して、データを抽出する • 対象はWebページ1ページ全体 7
  • 8. クローラーとは • 自動的にWebページのリンクを巡回して情報を 収集するプログラム • 情報を収集する際にはスクレイピングも 行われる • Botなどとも呼ばれる 例:Googleの検索エンジン   DFのクローラーXなど 8
  • 9. クローラーの機能 1. Webページ全体を見ていく 2. スクレイピングをする 3. 次のリンクを探して、 そのリンク先のWebページへ遷移する 4. 次のリンクがなくなるまで1~3を繰り返す 9
  • 10. Rubyのライブラリ • Webサイトの読み込み • open-uri • スクレイピング • nokogiri • Mechanize • クローラー • capybara 10
  • 11. 今回ご紹介するgemは Anemone 11
  • 12. アネモネ • キンポウゲ科イチリンソウ属 の多年草 • 語源はギリシア語で「風」を 意味するΆνεμος (anemos)から • 花言葉は「はかない夢」 12
  • 13. アネモネ • キンポウゲ科イチリンソウ属 の多年草 • 語源はギリシア語で「風」を 意味するΆνεμος (anemos)から • 花言葉は「はかない夢」 13
  • 14. Anemone • Ruby製のクローラーgem • 階層をたどる、sleep機能 など基本的な機能を網羅 ※画像は特に意味はありません 14
  • 15. Anemone • 基本的な使い方 1. #crawlに、クロールしたい始点URLをセット 2. 更にオプションも渡す 3. ブロック引数を指定して、ページごとに処理を したり、巡回先を絞り込んだりする 15
  • 16. .crawlのオプション • 第一引数にURLを指定(複数指定は配列で) • :depth_limit • 階層の深さを指定 • :skip_query_string • URLパラメータを無視するかを指定 16
  • 17. 他にも • :proxy_host, :proxy_port • プロキシサーバの設定 • :user_agent • ユーザエージェントを指定 • :delay • アクセス間隔を指定(秒) 17
  • 18. ページに対する処理 • .on_every_page • すべてのページに対して処理を行う • .on_pages_like • ページを指定して処理を行う • 正規表現で指定する 18
  • 19. 実際にクローリング してみる 19
  • 20. クロール対象 20
  • 21. Webページ全てのURLを取得 21
  • 22. 正規表現で絞り込む 22
  • 23. URLだけじゃなくて タイトルもほちぃ 23
  • 24. スクレイピング~ 24
  • 25. スクレイピングする上 で大事なのが… 25
  • 26. HTMLの構造を 理解すること! 26
  • 27. HTMLの構造を理解する • スクレイピングでクラス名やタグ、id名など を指定してデータを取得することが可能 • 正規表現で取ってくることもできる 27
  • 28. 正規表現なんて、 やってられない! 28
  • 29. CSSからもっと簡単 に! 29
  • 30. 必要な情報を探したい • XPathを使う方法 • CSSセレクタを使う方法 • Nokogiri::XML::Nodeを理解する必要がある 30
  • 31. XPath • HTMLをXML文書として、階層構造で特定部分 を示すための構文 • 一番近いHTMLのルートの階層から始まる • 例: 「//*[@id="content"]/article/div[1]/h1」 31
  • 32. XPathの取得方法 32
  • 33. XPathを取得した!▼ 33
  • 34. body内のid名 34
  • 35. 1番目のarticleタグ 35
  • 36. article内のdivタグ 36
  • 37. 目的のh1タグ 37
  • 38. Nodeについての話 の前に… 38
  • 39. Nokogiri::HTML::parse について 39
  • 40. parseの挙動 • URLを受け取って解析をしたあと、 Nokogiri::HTML::Documentクラスの オブジェクトを返します • 以下の継承関係にあります • Nokogiri::HTML::Document • Nokogiri::XML::Document • Nokogiri::XML::Node 40
  • 41. 余談 • Nokogiri::parseメソッドでは受け取った値が HTMLか、XMLかを自動判定して、 よしなに適したメソッドに渡す • しかし、誤判定もあるため、推奨されていない 41
  • 42. Nokogiri::XML::Node • NokogiriのXML::Documentから得られる 検索系のメソッド • Nokogiri::XML::Nodeの挙動とメソッドを 覚えることが大事 • 要素の操作や検索時の機能を有している • XPathやCSSの検索機能もここに実装されて いる 42
  • 43. Node vs NodeSet • 共通のメソッドが多く、挙動が似ている • 違いを理解していないと、メソッドがないな どのエラーが出ることも • 検索系のメソッドはNodeと同じ名前で内部的 にNodeを呼び出していることも多い • NodeSetはNodeを格納したリスト型配列 43
  • 44. 細かいメソッドなどは 本を読んでね☆ 44
  • 45. やっと本題に戻って 解析してみる 45
  • 46. 見出し一覧を 取得したい 46
  • 47. 47 3つの記事を 対象
  • 48. 見出しはh2タグ 48
  • 49. XPathを取得した!▼ 49 ここがほちぃ
  • 50. 対象を絞りこみ 50
  • 51. スクレイピング 51
  • 52. 結果 52
  • 53. 実際にはClassを確認 しながら実装すると良いです 53
  • 54. 最後にひとつだけ 54
  • 55. クローリングする上で のルール 55
  • 56. 注意 • クローラーで収集したデータをそのまま公開 すると著作権違反になります • 頻繁にアクセスをしてしまうと、 攻撃とみなされることもあります 56
  • 57. ルールブック 57
  • 58. robots.txt • 記述方式 • User-agent: 拒否したいUA • Allow: クロールの可能なページのパス • Disallow: クロールされたくないページのパス • Crawl-delay: クロール間隔(単位はあやふや) • rubyには、robotexがある • https://github.com/chriskite/robotex 58
  • 59. robots.txt一覧 • Amazon • http://www.amazon.com/robots.txt • はてなブログ • http://hatenablog.com/robots.txt • Wikipedia • http://ja.wikipedia.org/robots.txt 59
  • 60. みんなで守ろう! 60
  • 61. おまけ 61
  • 62. クローラーの効率化 62
  • 63. クローラーの高速化 • 並列化する • cosmicrawlerというgemがある • まだ試せてないので割愛 63
  • 64. クローラーの使い道 64
  • 65. 使い道 • 天気予報サイトから天気を取得 • ラズパイで毎朝天気を教えるものを作るとか • 週刊誌の発売日一覧を取得する • 株価の変動状況を取得する • 新刊情報を取得する 65
  • 66. 以上です。 66