SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Anemoneによるクローラー入門
Report
Tasuku Nakano
Follow
Programmer at 株式会社フィードフォース/feedforce
Nov. 4, 2014
•
0 likes
•
24,429 views
1
of
66
Anemoneによるクローラー入門
Nov. 4, 2014
•
0 likes
•
24,429 views
Download Now
Download to read offline
Report
Engineering
Anemone is ruby gem for crawler. How to use Anemone.
Tasuku Nakano
Follow
Programmer at 株式会社フィードフォース/feedforce
Recommended
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
38.1K views
•
37 slides
Rubyによるクローラー開発
しくみ製作所
2.3K views
•
11 slides
Rubyで始めるWebスクレイピング
Takuro Sasaki
34.7K views
•
24 slides
45分で理解する webクローリング入門 斉藤之雄
Yukio Saito
10.9K views
•
14 slides
Capybaraで雑にWebスクレイピング
Koji Nakamura
1.5K views
•
16 slides
Reactjs
しくみ製作所
2.2K views
•
18 slides
More Related Content
What's hot
MySQLユーザ視点での小さく始めるElasticsearch
Kentaro Yoshida
16.8K views
•
59 slides
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
7K views
•
22 slides
MongoDB World 2014に行ってきた!
Tetsutaro Watanabe
2.6K views
•
20 slides
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
4.6K views
•
26 slides
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
6.1K views
•
10 slides
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
10.1K views
•
29 slides
What's hot
(20)
MySQLユーザ視点での小さく始めるElasticsearch
Kentaro Yoshida
•
16.8K views
Elasticsearchで作る形態素解析サーバ
Shinsuke Sugaya
•
7K views
MongoDB World 2014に行ってきた!
Tetsutaro Watanabe
•
2.6K views
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
•
4.6K views
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
•
6.1K views
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
•
10.1K views
初めてのMongo db
Ryuji Tamagawa
•
2.7K views
がっつりMongoDB事例紹介
Tetsutaro Watanabe
•
23K views
20150523
Toshihiro Suzuki
•
469 views
Node js 入門
Satoshi Takami
•
82.8K views
[大図解]ピグライフはこう動いている
Akihiro Kuwano
•
12.3K views
いまいまMySQL@OSC2016長岡
sakaik
•
207 views
Node.jsで始める Modern JavaScript Framework
kamiyam .
•
2.7K views
TypeScriptへの入口
Sunao Tomita
•
22.2K views
いまいまMySQL@OSC2016島根
sakaik
•
317 views
Node.js で Web アプリ開発
Tatsumi Naganuma
•
2.3K views
今日はMongoDBの話はしない
Akihiro Kuwano
•
1.8K views
Hello, Node.js
Shin Sekaryo
•
1.4K views
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
•
83.2K views
Node.jsでサーバプログラマ デビューしよう
Yuusuke Takeuchi
•
5K views
Similar to Anemoneによるクローラー入門
JavaScript 研修
Yuki Ishikawa
13.6K views
•
93 slides
SQLアンチパターン メンター用資料
Hironori Miura
14.9K views
•
109 slides
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
1.1K views
•
52 slides
20140903groonga発表資料
Hironobu Saitoh
1.3K views
•
35 slides
Programming camp code reading
Hiro Yoshioka
2.3K views
•
52 slides
WordPress中級者への道!テンプレートタグはどう動くのか!?
Shinichi Nishikawa
5.3K views
•
53 slides
Similar to Anemoneによるクローラー入門
(20)
JavaScript 研修
Yuki Ishikawa
•
13.6K views
SQLアンチパターン メンター用資料
Hironori Miura
•
14.9K views
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
•
1.1K views
20140903groonga発表資料
Hironobu Saitoh
•
1.3K views
Programming camp code reading
Hiro Yoshioka
•
2.3K views
WordPress中級者への道!テンプレートタグはどう動くのか!?
Shinichi Nishikawa
•
5.3K views
PythonによるWebスクレイピング入門
Hironori Sekine
•
105.5K views
Search on AWS - IVS CTO Night and Day 2016 Spring
Eiji Shinohara
•
1.6K views
Programming camp 2008, Codereading
Hiro Yoshioka
•
292 views
協調フィルタリング with Mahout
Katsuhiro Takata
•
6.4K views
Word Press on Movable Type
Hajime Fujimoto
•
1.4K views
新しいCspojの紹介
Shoichi Yasui
•
1K views
Lab-ゼミ資料-5-20150512
Yuki Ogasawara
•
439 views
今からはじめる! Linuxコマンド入門
VirtualTech Japan Inc.
•
11.1K views
Heliumエンジンの設計と実装
DADA246
•
4.3K views
Ssaw08 1028
Atsushi Tadokoro
•
705 views
Web本文抽出 using crf
Shuyo Nakatani
•
6.4K views
HTML5での制作、いつから始める?
Fuminori Mori
•
1.8K views
Excel 方眼紙撲滅委員会 活動報告 2012.11 #odstudy
Takeshi Komiya
•
24.3K views
Elastic circle ci-co-webinar-20210127
Shotaro Suzuki
•
452 views
Anemoneによるクローラー入門
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の検索エンジンなど 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