Submit Search
GoでシュッとWebスクレイピングする
•
5 likes
•
8,498 views
Yuta Ohashi
Follow
Go(Un)Conference(Goあんこ)LT大会 2kg
Read less
Read more
1 of 30
Download now
Download to read offline
More Related Content
GoでシュッとWebスクレイピングする
1.
Goでシュッと Webスクレイピングする Go(Un)Conference(Goあんこ)LT大会 2kg 2018/05/25 Yuta Ohashi
2.
2 blue_goheimochi blue-goheimochi はじめて2ヶ月
3.
3 もくじ • モチベーション • Webスクレイピングとは? •
使ったパッケージ • 静的サイトのスクレイピング • 動的サイトのスクレイピング • まとめ
4.
4 サンプルコード https://github.com/blue-goheimochi/practice-scraping-with-go
5.
5 モチベーション
6.
6 モチベーション • 何か思いついた時にシュッとWebスクレイピングしたい • 自分の中にシュッとやる方法が確立してなかった •
PHP?Python?Node.js?Go? • Goでやってみよう
7.
7 Webスクレイピングとは?
8.
8 Webスクレイピングとは? • ウェブサイトから情報を抽出するコンピュータソフト ウェア技術のこと(Wikipedia調べ) • HTML取得→DOM解析→保存→加工→何かしらで利用 •
用法・容量を守って正しくスクレイピングする必要あり • Twitterはスクレイピングを利用規約で明示的に禁止している • 岡崎市中央図書館事件 • Webスクレイピングの注意事項一覧 https://qiita.com/nezuq/items/c5e827e1827e7cb29011
9.
9 https://twitter.com/ja/tos
10.
10 使ったパッケージ
11.
11 使ったパッケージ goquery https://github.com/PuerkitoBio/goquery jQueryライクにDOMの指定ができるやーつ!
12.
12 使ったパッケージ 例)タイトルタグの中身を取得 doc, _ :=
goquery.NewDocument(url) doc.Find("title").Text() 例)クラス名を指定して取得 doc, _ := goquery.NewDocument(url) doc.Find(".hoge-list > li")
13.
13 使ったパッケージ doc.Find(".hoge-list > li
").Each(func(i int, s *goquery.Selection) { s.Find(“a > span”).Text() }) 例)取得した複数のliをループする jQueryでDOM操作をゴリゴリしたことがある 人にはきっと使いやすい ※goqueryの詳しい使い方はググる
14.
14 静的サイトのスクレイピング
15.
15 静的サイトのスクレイピング 対象のサイト 1 2 リクエスト HTMLレスポンス
16.
16 簡単!
17.
17 静的サイトのスクレイピング 簡単! • ChromeのDeveloper Toolsで確認したままのDOM •
素直に指定すれば要素が取得できる • qoqueryだけでシュッとスクレイピングできる
18.
18 動的サイトのスクレイピング
19.
19 動的サイトのスクレイピング 対象のサイト 1 2 リクエスト HTMLレスポンス
20.
20 むずかしぃ・・・
21.
21 動的サイトのスクレイピング むずかしぃ・・・ • ChromeのDeveloper Toolsで確認したままのDOM ではない・・・ •
レンダリングが終わる前のHTMLが返ってくる • ググるとSeleniumと組み合わせてってのが多い • 面倒なことはしたくない・・・(したほうがいい
22.
22 そこで
23.
23 動的サイトのスクレイピング Scrapy + Splash •
Scrapy • Python製のクローリング・スクレイピングフレーム ワーク • robots.txtを考慮してくれる(らしい) • Splash • Python製のJavascriptレンダリングサービス
24.
24 Scrapy + Splashの 環境構築面倒だよぉ
25.
25 動的サイトのスクレイピング Scrapy + SplashのDockerのコンテナがある •
scrapinghub/splash • 静的サイトをスクレイピングするのと同じ感じで できる • 便利な世の中ですね
26.
26 動的サイトのスクレイピング 対象のサイト Scrapy + Splash 1 2 35 リクエスト リクエスト HTMLレスポンス4 レンダリング レンダリング後のHTMLレスポンス
27.
27 動的サイトのスクレイピング Scrapy + Splashのコンテナを起動 $
docker pull scrapinghub/splash $ docker run -d -p 5023:5023 -p 8050:8050 -p 8051:8051 scrapinghub/splash Scrapyを経由してアクセスするURL http://localhost:8050/render.html?url=https://hogeho ge.com&timeout=10&wait=3 ※5023: telnet 8050: http 8051: https ※ Scrapy,Splashの詳しい内容・使い方はググる
28.
28 まとめ
29.
29 まとめ GoでシュッとWebスクレイピングするなら・・・ • goqueryを使う • Scrapy
+ Splashのコンテナを使う • ルールを守ってスクレイピングする
30.
30 おわり
Download