0
WEBクローリング&スクレイピングの最前線ほこ×たてで語られなかった5万枚画像の真実ネットエージェント株式会社 杉浦 隆幸1
about me• 杉浦 隆幸• ネットエージェント株式会社 代表取締役• PacketBlackHole, OnePointWall, 防人, secroidの原開発者• CTFチャレンジジャパン 経済産業省主催のCTF(ハッキングの技術大会...
Agenda• クローリング• 概要・リスク・レベル・対策・対策の対策• スクレイピング• 環境・実例• 応用例• secroid• easy webscrap• zip de kure• P2P公開用は一部情報を削減しています。3
クローラcrawler4
クローラ• ブラウザはURLをページに変える。• クローラはURLをHTMLデータに変える。• 自動的にリンクを辿るや連番などにより1つ以上の情報を取得する。• 周期的に訪問するものもある。• 最初以外は人を介さずに自動的に動作する。• 検索エ...
昨今のクローリング事情• goo(NTT系)がGoogleへの検索エンジン乗り換え 2003年• 情報大航海プロジェクト 2005~2010年• 検索エンジンを国策で支援• 著作権法改正 2009年• 検索エンジン・情報解析の合法化• Libr...
クローラのリスク• 秘孔をつくクローリング• 多大な負荷を伴うクエリーを発行• 2010年 Librahack事件 (偽計業務妨害で起訴猶予) http://librahack.jp/• 深すぎるクローリング• 全く拘束力がない robots....
http://dic.nicovideo.jp/a/ban8
クローラレベル• 1 wget• 2 UAをブラウザに• 3 Cookie対応、referer対応• 4 リクエスト全てをブラウザと同じに• 5 リクエスト全てをブラウザと同じに+Cookie対応• 6 IPアドレスを短周期で変える• 7 ブラ...
まず、wgetから始めよ• 多くのLinux環境、MacOSと、Cygwin,Windows版で利用できるCUIのダウンロードソフト• wget –r –l 5 –h http://www.yahoo.co.jp/ などコマンドラインで再帰的に...
UA (UserAgent)• HTTP リクエストヘッダに含まれる。何を使ってアクセスしているのかを示すヘッダ。利用OSやブラウザの名前、バージョン名を含むことも多いので、ユーザの識別にも使われている。• 例: Mozilla/5.0 (Wi...
referer• HTTPリクエストヘッダのひとつ。リンク元のWebページを示すURL。• URLリストからダイレクトにダウンロードしていると、refererがないと通常の手順でダウンロードしていないとしてエラーを返すようにできる。• サンプル...
何種類かクローリングをしてみましょう• wget• wget + UA• LWP• phantomjs• firefox+mozrepl+tcpproxy13
クローリングの難しい条件• TLS/SSL (以下SSL)• HTTP Proxy+SSL• Socks• Socks Proxy + SSL• Tor• Tor + SSL• SPDY• SPDY Proxy + SPDY• Tor + SP...
Torhttps://www.torproject.org/http://ja.wikipedia.org/wiki/Tor15
SPDY• Googleの開発した次世代のHTTPプロトコルの候補。SSL通信上で作成されているので、SSL対応が必須。表示が早くなりそうな名前であるが、大抵の場合は、サイトアクセスの構成を見直すなど先にやることがある。マシン台数が多く転送量が...
クローラ対策• capcha• cookie• 多重アクセス検出• 同一IPアドレス多量アクセス検出• UA指定• robots.txt• ログイン要求• JavaScriptでセッションキー生成17
18諸 般 ノ 事 情 ニ ヨ リ 非公 開
19諸 般 ノ 事 情 ニ ヨ リ 非公 開
スクレイピングscraping20
環境の整った言語• Perl• Web::Scraper• HTML::TreeBuilder• Python• Ruby• WSH (Windows Script Host)• jQuery• and more middle wares• h...
スクレイピング方法 (1/2)• 意外とスクレイピングコストは高い• grepタイプ(簡単・軽い)• grepで正規表現で抽出• 行単位処理で正規表現で抽出• コマンド grep or egrepを使う• wget -O - http://ha...
スクレイピング方法 (2/2)• HTML構文解析(重い・正確)• CSS のシンタックス (Chromeでデモを交えて解説)• XPath• ツリー構造のアドレスで判定23
XPath (HTML文書における)• HTMLをXML文書として、階層構造で特定部分を示すための構文。• 例:• html/body/p/a• //*[@id="poptoc"]/ol/li[7]/ahttp://ja.wikipedia.o...
実際にやってみる• scraper http://hoge.example.com/25
応用例クローラ×スクレイピングapplication26
• Androidアプリのリスクレベル判定+検索エンジン• Androidアプリ情報とアプリのクローラー• Google Play のアプリの情報分析、検索機能を提供• 勝手マーケットやウイルスも検索対象27
日本GW米国ProxyGoogle Play(SSL or SPDY)日本公開サーバ米国公開サーバ他マーケット(HTTP)評価用サーバ・インデクサ・ストレージ・DB・クローラ群28
ほこ×たて(対戦用)• 画像検索ダウンローダー• 対象:google,yahoo,naver の画像検索• Googleの類似画像検索は役に立たなかった。• Googleのクローラ対策を抜けるためにレベル5のクローラで検索。• 画像ダウンロード...
各サイト専用クローラ・ Google 画像検索・ Yahoo画像検索・ NAVER画像検索検索文字列リスト×5万超のURLリスト各サイト用、実体URL抽出スクリプトsort | uniqリストを12分割12プロセスのwgetでダウンロード0:1...
easy webscrap (商用サービス)• 定点観測用Webscraper• Webインターフェイスで、GUIで選ぶことにより取り出し範囲が容易に決定できる。• 定期的にランキング取得・定点監視に• モバイルからPCまでの画面サイズに応じて...
32・素人でも利用でき、GUIで範囲を決められるのがポイント。
日付 会員数2013/6/1 213102013/6/2 215472013/6/3 217842013/6/4 220212013/6/5 222582013/6/6 224952013/6/7 227322013/6/8 229692013...
zip de kure• ブログの画像をzipにまとめてダウンロードできる。zipを要求する麻呂のためのクローラ。34
http://livedoor.blogimg.jp/hamusoku/imgs/a/8/a8a3cd59.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/9/d/9dc246dd.jpghttp://l...
P2Pクローラ• Winny• Share• PerfectDark• Limewire/Cabos• BitTorrent• P2Pは主としてClosed プロトコルのクローリング• 自律分散型36
37http://www.netagent.co.jp/
Upcoming SlideShare
Loading in...5
×

Webクローリング&スクレイピングの最前線 公開用

50,035

Published on

web crawler and scraping

Published in: Technology
1 Comment
153 Likes
Statistics
Notes
No Downloads
Views
Total Views
50,035
On Slideshare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
256
Comments
1
Likes
153
Embeds 0
No embeds

No notes for slide

Transcript of "Webクローリング&スクレイピングの最前線 公開用"

  1. 1. WEBクローリング&スクレイピングの最前線ほこ×たてで語られなかった5万枚画像の真実ネットエージェント株式会社 杉浦 隆幸1
  2. 2. about me• 杉浦 隆幸• ネットエージェント株式会社 代表取締役• PacketBlackHole, OnePointWall, 防人, secroidの原開発者• CTFチャレンジジャパン 経済産業省主催のCTF(ハッキングの技術大会)優勝メンバー (Agent IV)• Winnyの暗号解読に初めに成功• TVニュース番組での事件解説多数• 第4回 IPA賞受賞• 2010年に政府の情報保全検討委員• など2
  3. 3. Agenda• クローリング• 概要・リスク・レベル・対策・対策の対策• スクレイピング• 環境・実例• 応用例• secroid• easy webscrap• zip de kure• P2P公開用は一部情報を削減しています。3
  4. 4. クローラcrawler4
  5. 5. クローラ• ブラウザはURLをページに変える。• クローラはURLをHTMLデータに変える。• 自動的にリンクを辿るや連番などにより1つ以上の情報を取得する。• 周期的に訪問するものもある。• 最初以外は人を介さずに自動的に動作する。• 検索エンジンや、特定の情報解析用、データ収集、メールアドレス収集などに用いられる。5
  6. 6. 昨今のクローリング事情• goo(NTT系)がGoogleへの検索エンジン乗り換え 2003年• 情報大航海プロジェクト 2005~2010年• 検索エンジンを国策で支援• 著作権法改正 2009年• 検索エンジン・情報解析の合法化• Librahack事件 2010年• 図書館のWebをクローリングしていたら逮捕される• Yahoo Japan が Google検索エンジン乗り換え 2010年• Google検索の国内シェアが98%に• NSAのPRISMが話題になる 2013年6
  7. 7. クローラのリスク• 秘孔をつくクローリング• 多大な負荷を伴うクエリーを発行• 2010年 Librahack事件 (偽計業務妨害で起訴猶予) http://librahack.jp/• 深すぎるクローリング• 全く拘束力がない robots.txtを守ろう (著作権法の改正で拘束力を持った?)• ブラウジングならrobots.txtを守らなくて良い?• 無限再帰的URLの存在• 利用禁止措置を食らう• 同時接続数制限• IP BAN, AS BAN• 高速すぎ並列すぎるクローリング• 1 page/秒を超えない早さで• HTTP/1.1 で keep alive• 某中国企業によるクローリング• 著作権侵害リスク• 検索機能の提供か情報解析が必要(平成 21 年著作権法改正)• 詳しくは著作権法の専門家にどうぞ7
  8. 8. http://dic.nicovideo.jp/a/ban8
  9. 9. クローラレベル• 1 wget• 2 UAをブラウザに• 3 Cookie対応、referer対応• 4 リクエスト全てをブラウザと同じに• 5 リクエスト全てをブラウザと同じに+Cookie対応• 6 IPアドレスを短周期で変える• 7 ブラウザでクローリングする• 8 アクセスタイミングをランダマイズする• 9 人間がアクセスした内容をパケットから再現• 10 人間のアクセスパターンでブラウザ自動制御レベルを上げるたびにより人間らしく。注) 当社基準9
  10. 10. まず、wgetから始めよ• 多くのLinux環境、MacOSと、Cygwin,Windows版で利用できるCUIのダウンロードソフト• wget –r –l 5 –h http://www.yahoo.co.jp/ などコマンドラインで再帰的にもダウンロード可能なクローラ。robots.txt対応。10
  11. 11. UA (UserAgent)• HTTP リクエストヘッダに含まれる。何を使ってアクセスしているのかを示すヘッダ。利用OSやブラウザの名前、バージョン名を含むことも多いので、ユーザの識別にも使われている。• 例: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/27.0.1453.94 Safari/537.36• 参考: http://www.openspc2.org/userAgent/• ガラケーはここに、個体番号があったりと個体識別で多くの問題を生んだ。11
  12. 12. referer• HTTPリクエストヘッダのひとつ。リンク元のWebページを示すURL。• URLリストからダイレクトにダウンロードしていると、refererがないと通常の手順でダウンロードしていないとしてエラーを返すようにできる。• サンプル• Referer: http://www.example.co.jp/12
  13. 13. 何種類かクローリングをしてみましょう• wget• wget + UA• LWP• phantomjs• firefox+mozrepl+tcpproxy13
  14. 14. クローリングの難しい条件• TLS/SSL (以下SSL)• HTTP Proxy+SSL• Socks• Socks Proxy + SSL• Tor• Tor + SSL• SPDY• SPDY Proxy + SPDY• Tor + SPDY・言語の実装に対して、Proxyの対応状況が悪い場合がおおい。・SPDYなどの新しいプロトコルは実装されてないことも多い。・SSLを使う上で便利なSOCKSも限定対応の場合も。14
  15. 15. Torhttps://www.torproject.org/http://ja.wikipedia.org/wiki/Tor15
  16. 16. SPDY• Googleの開発した次世代のHTTPプロトコルの候補。SSL通信上で作成されているので、SSL対応が必須。表示が早くなりそうな名前であるが、大抵の場合は、サイトアクセスの構成を見直すなど先にやることがある。マシン台数が多く転送量が多く常時SSLで限界まで最適化した場合のみ恩恵にあやかれるらしい。• Googleやtwitterが対応している。16
  17. 17. クローラ対策• capcha• cookie• 多重アクセス検出• 同一IPアドレス多量アクセス検出• UA指定• robots.txt• ログイン要求• JavaScriptでセッションキー生成17
  18. 18. 18諸 般 ノ 事 情 ニ ヨ リ 非公 開
  19. 19. 19諸 般 ノ 事 情 ニ ヨ リ 非公 開
  20. 20. スクレイピングscraping20
  21. 21. 環境の整った言語• Perl• Web::Scraper• HTML::TreeBuilder• Python• Ruby• WSH (Windows Script Host)• jQuery• and more middle wares• http://www.scrapy.org/• http://nokogiri.org/21
  22. 22. スクレイピング方法 (1/2)• 意外とスクレイピングコストは高い• grepタイプ(簡単・軽い)• grepで正規表現で抽出• 行単位処理で正規表現で抽出• コマンド grep or egrepを使う• wget -O - http://hamusoku.com/archives/7927364.html |grepblogimg|sed s/.* src="//g|sed s/" .*//g• コンピュータ言語内で正規表現を使う• cat te.html|perl -e $/="<";while(<STDIN>){$_=~/href="(.*)?"/;print$1,"n";}22
  23. 23. スクレイピング方法 (2/2)• HTML構文解析(重い・正確)• CSS のシンタックス (Chromeでデモを交えて解説)• XPath• ツリー構造のアドレスで判定23
  24. 24. XPath (HTML文書における)• HTMLをXML文書として、階層構造で特定部分を示すための構文。• 例:• html/body/p/a• //*[@id="poptoc"]/ol/li[7]/ahttp://ja.wikipedia.org/wiki/XML_Path_Language24
  25. 25. 実際にやってみる• scraper http://hoge.example.com/25
  26. 26. 応用例クローラ×スクレイピングapplication26
  27. 27. • Androidアプリのリスクレベル判定+検索エンジン• Androidアプリ情報とアプリのクローラー• Google Play のアプリの情報分析、検索機能を提供• 勝手マーケットやウイルスも検索対象27
  28. 28. 日本GW米国ProxyGoogle Play(SSL or SPDY)日本公開サーバ米国公開サーバ他マーケット(HTTP)評価用サーバ・インデクサ・ストレージ・DB・クローラ群28
  29. 29. ほこ×たて(対戦用)• 画像検索ダウンローダー• 対象:google,yahoo,naver の画像検索• Googleの類似画像検索は役に立たなかった。• Googleのクローラ対策を抜けるためにレベル5のクローラで検索。• 画像ダウンロードはリスト化後12並列処理でwgetを利用。29
  30. 30. 各サイト専用クローラ・ Google 画像検索・ Yahoo画像検索・ NAVER画像検索検索文字列リスト×5万超のURLリスト各サイト用、実体URL抽出スクリプトsort | uniqリストを12分割12プロセスのwgetでダウンロード0:15プログラム作成と検索文字列の作成0:45ダウンロード完了地域人名フォルダ作成&リネーム&タイムスタンプ変更&EXIF加工30
  31. 31. easy webscrap (商用サービス)• 定点観測用Webscraper• Webインターフェイスで、GUIで選ぶことにより取り出し範囲が容易に決定できる。• 定期的にランキング取得・定点監視に• モバイルからPCまでの画面サイズに応じて表示可能。• CSVで出力可能• 技術者ではない派遣のオネイサンがメインで使っています。• 開発元 ネットエージェント株式会社 大阪支社31
  32. 32. 32・素人でも利用でき、GUIで範囲を決められるのがポイント。
  33. 33. 日付 会員数2013/6/1 213102013/6/2 215472013/6/3 217842013/6/4 220212013/6/5 222582013/6/6 224952013/6/7 227322013/6/8 229692013/6/9 232062013/6/10 234432013/6/11 236802013/6/12 239172013/6/13 241542013/6/14 243912013/6/15 246282013/6/16 248652013/6/17 251022013/6/18 253392013/6/19 255762013/6/20 2581333・管理画面より、取りたい場所を指定。・定期的に値を取得し統計データとして活用。
  34. 34. zip de kure• ブログの画像をzipにまとめてダウンロードできる。zipを要求する麻呂のためのクローラ。34
  35. 35. http://livedoor.blogimg.jp/hamusoku/imgs/a/8/a8a3cd59.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/9/d/9dc246dd.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/4/5/45987d80.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/f/b/fb59814c.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/0/1/0125d552.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/5/a/5a7f0ed6-s.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/b/1/b1d554dc-s.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/9/d/9da77340-s.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/6/a/6afc7bec.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/5/0/50d2e80e.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/1/b/1b27b468.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/9/4/9493aff2.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/5/d/5d29c13f.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/7/3/731430d7.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/2/4/24d46578.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/2/2/222c8d66.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/2/f/2ff65a68.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/3/6/3678b0d2.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/d/f/dfc4bcb9.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/6/8/683a79b0.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/7/b/7bd7a11b.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/d/1/d11b162c.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/c/d/cd67355e.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/1/b/1b8c6fcc.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/b/7/b744d6cb.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/4/1/41d7ae79.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/a/8/a8263966.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/2/d/2d932d75.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/b/4/b4d324bd.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/4/5/459322c9.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/0/a/0a449457.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/0/d/0d8453b4.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/3/2/32790199.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/9/b/9b69ba8b.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/4/e/4e36cbb8.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/5/c/5c5afa12.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/7/d/7ddb24cc.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/e/c/ec53246c.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/e/4/e492e53e.gifhttp://livedoor.blogimg.jp/hamusoku/imgs/7/f/7ff66a59.gifhttp://livedoor.blogimg.jp/hamusoku/imgs/f/1/f1b4d0c2.gifhttp://livedoor.3.blogimg.jp/hamusoku/imgs/9/5/95cc4809.jpghttp://livedoor.blogimg.jp/hamusoku/imgs/d/b/db83dea8.gifGET andZip35
  36. 36. P2Pクローラ• Winny• Share• PerfectDark• Limewire/Cabos• BitTorrent• P2Pは主としてClosed プロトコルのクローリング• 自律分散型36
  37. 37. 37http://www.netagent.co.jp/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×