Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

スクレイピングその後

3,806 views

Published on

スクレイピングに関する発表
http://www.slideshare.net/hasegawatomoki/ss-37424274
の続編です。

Published in: Software
  • Be the first to comment

スクレイピングその後

  1. 1. スクレイピングその後 長谷川 智希 2014/07/28 PHP勉強会#80
  2. 2. 自己紹介 • 長谷川智希 • デジタルサーカス(株) 副団長CTO • 趣味: Web開発, iOSアプリ開発 • その他趣味: レンタルカート, 電子工作(mbed) … @tomzoh TOMZOH
  3. 3. デジタルサーカス(株) • Webサイト開発(PHP, CakePHP, Drupal) • スマホアプリ開発(iOS, Android) • 自社サービス (http://appbuilder.jp)
  4. 4. 前回までのあらすじ http://www.slideshare.net/hasegawatomoki/ss-36223911 前回資料: スクレイピングのススメ
  5. 5. 前回までのあらすじ • 「スクレイピング」とは。 • HTMLScrapingライブラリとTidyを使った実例。 • オチ
  6. 6. スクレイピングとは これを… こうする array( (int) 0 => array( 'is-fba' => false, 'shipping' => (int) 257, 'price' => (int) 2001, 'condition' => '中', 'subcondition' => '可', 'seller' => array( 'name' => 'lambdas', 'merchant-id' => 'A3VELMD24S0ERO' ), ),
  7. 7. 前回までのあらすじ • 「スクレイピング」とは。 • 手順紹介 • オチ
  8. 8. 手順紹介 1. HTMLを取得する … file_get_contents(), curl 2. HTMLを整形する … Tidy or not 3. HTMLをパースする … HTMLScraping 4. 情報を取り出す … SimpleXMLオブジェクト
  9. 9. 前回までのあらすじ • 「スクレイピング」とは。 • HTMLScrapingライブラリとTidyを使った実例。 • オチ
  10. 10. オチ • 本日ご紹介したHTMLScraping、出展を示そう と数年ぶりに検索、開いてみたら…
  11. 11. WANTED • 無くなっていました。orz • 誰かSJISでも使えるパーサ知ってたら教えてく ださい。
  12. 12. スクレイピングその後
  13. 13. スクレイピングその後 • LT後のディスカッションや公開したスライド への反応としていくつかライブラリ教えて頂 いた。 • phpQuery • Guzzle (Goutte) • QueryPath • WebDriver
  14. 14. phpQuery
  15. 15. phpQuery • 「phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.」 • DOM要素をjQuery風に選択するPHP用ライブ ラリ。 https://code.google.com/p/phpquery/
  16. 16. phpQuery こう使う • composer.jsonを一生懸命書けばComposerでインストール可能。 • jQueryぽく要素を選択。かなりのjQueryぽさ。強烈。 • 「<meta charset="utf-8">宣言だけど実際はSJIS」「閉じタグ無しやタ グ入れ子は当たり前」「IDが重複してる」というエグいHTMLに対して 全体をUTF-8に変換してあげればパースできた。 • SJISはNGぽい。 • クセの強い書き方に慣れれば使い勝手良さそう。 !!
  17. 17. QueryPath
  18. 18. QueryPath • 「QueryPath is a PHP library for manipulating HTML and XML. Think of it as jQuery for the server.」 • HTMLやXMLをjQueryの様に扱うPHP用ライブ ラリ。 http://querypath.org/
  19. 19. QueryPath こう使うらしい • インストールはComposerでらくちん。 • jQueryぽく要素を選択。 • 前出のエグいHTMLはライブラリ内部でエラーが出てパースできなかった。 • マンチェスターユナイテッド(日本)の試合日程ページ(*1)もパース出来ず…。 • <html><head><title>foo</title></head><body></body></html>みたいな のはパースできる。(foo → タイトル でもパースできるけど化ける) • 今回はあきらめた。 http://www.manutd.jp/FixturesAndResults/UnitedFixturesandResults.aspx*1
  20. 20. Guzzle (Goutte)
  21. 21. Guzzle (Goutte) • 「Guzzle is a PHP HTTP client that makes it easy to work with HTTP/1.1 and takes the pain out of consuming web services.」 • あれ?HTTPクライアントライブラリ? • 関連してGoutteというのが見つかった。 • Symfony, Zend Framework のコンポネントを使った ラッパライブラリ。Guzzleも使ってる模様。 グ ー ト https://github.com/fabpot/goutte
  22. 22. Goutte こう使う • インストールはComposerでらくちん。 • XPathまたはCSSセレクタでノードを選択可能。どちらも使えるの がポイント高。 • eachに無名関数を渡すナウい感じ。 • 前出のエグいHTMLでも前処理無しにそのままパースできた。 • 使い勝手良さそう。これを使い込んでみようと思った。
  23. 23. WebDriver
  24. 24. WebDriver • 「PHP bindings for Selenium WebDriver 」 • 画面表示の無いブラウザでWebページを表示 し、要素を選択しようというアプローチ。 • ちゃちゃっと入れてちゃっと動かすつもりでい たら結構大事だったので今回はあきらめた。 https://code.google.com/p/php-webdriver-bindings/ (php-webdriver-bindings)
  25. 25. まとめ • スクレイピングライブラリ、いろいろある。 • 対象によって使い分けると良いと思う。 • 個人的にはGoutteイチオシ。 • Composerでかんたんインストール • HTMLへの強度の高さ • CSSセレクタ & XPathセレクタの両方が使える。 • 情報くださった皆様ありがとうございます!
  26. 26. KeyNote テンプレート: 「大体いい感じになるKeynoteテンプレート「Azusa」作った」http://memo.sanographix.net/post/82160791768 ありがとうございました PHPerパワーが不足中! 求職中の方、フリーの方お声かけ待ってます! iOSネイティブアプリ作成Webサービス http://appbuilder.jp @tomzoh

×