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.

続Pythonによるwebスクレイピング入門

15,578 views

Published on

続Pythonによるwebスクレイピング入門

Published in: Engineering
  • Be the first to comment

続Pythonによるwebスクレイピング入門

  1. 1. 続PythonによるWeb スクレイピング入門 関根裕紀
  2. 2. 自己紹介 • 関根裕紀(せきね ひろのり) • アライドアーキテクツ株式会社 • ソフトウェア・エンジニア • マーケティングを支援するサービスの開発 • 新卒メンバー、若手メンバーの教育支援 • Twitter: @checkpoint
  3. 3. Pythonとの関わり • PyCon JP スタッフ (2014, 2015) • Pythonエンジニア養成読本(Web開発) • スピーカー • AWDD • LLDiver • PyCon JP 2014 • Phone Symposium Tokyo 2015
  4. 4. Pythonもくもく会(毎月)
  5. 5. アジェンダ • Webスクレイピングとは? • PythonでのWebスクレイピング • Webスクレイピングのサンプル紹介
  6. 6. Webスクレイピングとは? Webスクレイピングとは、WebサイトからWebページのHTMLデータを収 集して、特定のデータを抽出、整形し直すことである。 Webスクレイピングを行うことで、Webページを対象として、あたかも Web APIを利用しているかのようにデータを効率的に取得・収集すること が可能になる。用途の例としては、部分的にコンテンツを取り出して携帯 電話向けのコンテンツを生成したり、小見出しの一覧を生成したり、といっ た使い方あある。Webスクレイピングは様々な手段で実現可能であるが、 PHPやPerlといったスクリプト言語を使用して行われることが多い。 ( http://www.sophia-it.com/content/Webスクレイピング ) IT用語辞典より
  7. 7. Webスクレイピング • WebサイトからHTMLのデータを収集 • 特定のデータを抽出、加工 • 抽出したデータを再利用 • クローリング + スクレイピング
  8. 8. クローリング • 英語の意味は、[はう、ゆっくり進む] • Webページのリンクの内容をたどる • Webページの内容をダウンロードして収集 • クローラー、スパイダーと呼ばれる
  9. 9. スクレイピング • 英語の意味は、[ 削ること ] • ページの内容から必要な情報を抽出すること
  10. 10. 用途 • 検索エンジン • 価格比較 • 気象データの監視 • サイトの変更検出 • Webサイトの情報解析、研究(比較、分類、統計など) • マッシュアップ
  11. 11. 方法(1) • Webサービス、アプリケーション • Yahoo! Pipes( https://pipes.yahoo.com/ ) • kimono ( https://www.kimonolabs.com/ ) • import.io ( https://import.io/ )
  12. 12. 方法(2) • Ruby • Nokogiri • Mechanize • Perl • Web::Scraper • JavaScript • CasperJS
  13. 13. Pythonでのスクレイピング • 標準ライブラリ • BeautifulSoup • pyquery • Scrapy • その他
  14. 14. Python バッテリー付属言語
  15. 15. 標準ライブラリ • Pythonの標準ライブラリは充実している • ネットワーク、正規表現、etc • Pythonの処理系だけあれば良い • 簡単なスクレイピングであれば十分実用的
  16. 16. サンプル
  17. 17. Beautiful Soup • 2004年位から存在するライブラリ • HTMLやXMLからデータを抽出して取得できる • 複数のパーサーに対応、パーサーを指定できる • 最新バーションはBeautiful Soup 4系 • Python 2.7、Python 3.2に対応
  18. 18. サンプル
  19. 19. 実行結果
  20. 20. pyquery • jQuery風にHTML/XML操作が可能 • パーサーにはlxmlを使用 • JQuery風のセレクタを利用できる
  21. 21. サンプル
  22. 22. 実行結果
  23. 23. Scrapy Scarpyは速くて、ハイレベルなスクレイピング クローラーのフレームワーク。Webサイトのク ロールと、構造化されたデータを取り出すのに 使用する。幅広い目的に使用できる。データマ イニングから、モニタリング、自動テストなど
  24. 24. Scrapy
  25. 25. Scrapyの特徴 • クローリング、スクレイピングフレームワーク • シンプル、拡張性がある • バッテリー付属 • ドキュメント、テストが充実 • コミュニティが活発 • Python2.7のみ対応
  26. 26. Scrapyの主な機能 • Webページからの情報抽出 • Robots.txtのパース • ドメイン、IPアドレス単位のクロール間隔調整 • 並行処理 • エラー時のリトライ(回数を設定) http://orangain.hatenablog.com/entry/scrapy
  27. 27. Scrapyのアーキテクチャ https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  28. 28. コンポーネント • Scrapy Engine • Scheduler • Downloader • Spiders • Item Pipeline • Downloader middlewares • Spider middlewares
  29. 29. Scrapy Engine • コンポーネント間のデータフローを制御する • 特定のアクションが発生したら、イベントを 起こす
  30. 30. Spider • ユーザーが作成するカスタムクラス • 取得したいURL、抽出する項目を記述する • ダウンロードしてコンテンツをスクレイピン グして、Itemを作成する
  31. 31. Scheduler • EngineからRequestを受け取り、スケジュー リングする
  32. 32. Downloader • 実際にWebページを取得する。 • Downloader middlewaresで処理を差し込む 事ができる。(キャッシュなど)
  33. 33. Item Pipeline • スパイダーによって抽出されたアイテムを出力 • データのクレンジング、検証 • 永続化(JSON、File、DB、Mail)など
  34. 34. 手順 • Scrapyプロジェクトの作成 • 抽出するアイテムの定義 • アイテムの抽出とクローリングのためのSpiderを作成 • 抽出したアイテムのパイプライン処理の作成 • 基本はSpiderとItem部分を書いていく
  35. 35. サンプル
  36. 36. プロジェクトの作成 $ scrapy startproject scrapy_sample
  37. 37. 抽出するItem定義 $ vi items.py
  38. 38. Spider作成 $ vi spiders/mininova.py
  39. 39. 実行 $ scrapy crawl mininova -o scraped_data.json
  40. 40. サンプル紹介 • Airbnbの物件情報をスクレイピング • 京都、沖縄(任意の場所) • 6/27 - 6/28(この期間で宿泊可能な物件) • 20000円以内 • 価格の分布図を表示(Web画面)
  41. 41. 物件情報
  42. 42. ライブラリ - Scraping • requests (HttpClient) • Beautiful Soup (Scraping) • SqlAlchemy ( O/R Mapper)
  43. 43. ライブラリ - Web • Bottle ( Web Application Framework) • Highcharts ( Graph Library) • SqlAlchemy ( O/R Mapper)
  44. 44. Bottle • 軽量なWebアプリケーションフレームワーク • ルーティング • テンプレートエンジン • HTTPユーティリティ • ビルトインのサーバー
  45. 45. HelloWorld
  46. 46. SQLAlchemy • データベースやSQLに関連する機能を提供す るライブラリ • O/Rマッパーは提供される機能のうちの1つ
  47. 47. モデルの定義
  48. 48. レコード作成、検索
  49. 49. デモ
  50. 50. デモ
  51. 51. ソースコード(モデルの定義)
  52. 52. ソースコード(スクレイピング)
  53. 53. ソースコード(クローリング)
  54. 54. ソースコード(Web)
  55. 55. ソースコード(Web)
  56. 56. ソースコード(Web)
  57. 57. まとめ • Pythonでスクレイピングを行う場合、色々な アプローチがある。 • 標準のライブラリから、フレームワークまで 選択肢は沢山ある。 • 実際の要件に合わせて使用すれば良い。
  58. 58. 参考資料 • http://scrapy.org ( Scrapy ) • http://www.slideshare.net/MasayukiIsobe/web-scraping-20140622isobe • https://github.com/gawel/pyquery/ ( pyquery ) • http://www.crummy.com/software/BeautifulSoup/ ( BeautfulSoup ) • http://orangain.hatenablog.com/entry/scrapy • http://akiniwa.hatenablog.jp/entry/2013/04/15/001411 • http://tokyoscrapper.connpass.com/ ( Webスクレイピング勉強会 ) • http://www.slideshare.net/nezuQ/web-36143026?ref=http://www.slideshare.net/ slideshow/embed_code/36143026 • http://qiita.com/nezuq/items/c5e827e1827e7cb29011( 注意事項 )
  59. 59. 宣伝 • PyCon JP 2015( https://pycon.jp/2015/ ) • 10月9日(金) - 10月12日(月) • トークセッションの募集中 • チュートリアル講師も募集中
  60. 60. ご静聴ありがとうございました

×
Save this presentationTap To Close