Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

100 412 vues

Publié le

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

Publié dans : Ingénierie
  • Login to see the comments

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

  1. 1. Pythonによる Webスクレイピング入門 関根裕紀
  2. 2. 自己紹介 • 関根裕紀(せきね ひろのり) • アライドアーキテクツ株式会社 • ソフトウェア・エンジニア • PyCon JP 2014 スタッフ • Twitter(@checkpoint )
  3. 3. • 前職まで • RSSリーダー、SNS • WebMail • 写真共有サービス • 現在(アライドアーキテクツ) • モニプラFacebook、Social-IN • Webアプリケーション開発全般を担当 経歴
  4. 4. アジェンダ • Webスクレイピングとは • PythonでのWebスクレイピング • ライブラリの紹介、サンプル(入門編)
  5. 5. Webスクレイピングとは? Webスクレイピングとは、WebサイトからWebページのHTMLデータを収 集して、特定のデータを抽出、整形し直すことである。 ! Webスクレイピングを行うことで、Webページを対象として、あたかも Web APIを利用しているかのようにデータを効率的に取得・収集することが 可能になる。用途の例としては、部分的にコンテンツを取り出して携帯電話 向けのコンテンツを生成したり、小見出しの一覧を生成したり、といった使 い方あある。Webスクレイピングは様々な手段で実現可能であるが、PHPや Perlといったスクリプト言語を使用して行われることが多い。 ! IT用語辞典 ( http://www.sophia-it.com/content/Webスクレイピング ) より
  6. 6. Webスクレイピング • WebサイトからHTMLのデータを収集 • 特定のデータを抽出、加工 • 抽出したデータを再利用 • クローリング + スクレイピング
  7. 7. クローリング • 英語の意味は、[ はう、ゆっくり進む] • Webページのリンクの内容をたどる • Webページの内容をダウンロードして収集 • クローラー、スパイダーと呼ばれる
  8. 8. スクレイピング • 英語の意味は、[ 削ること ] • ページの内容から、必要な情報を抽出すること
  9. 9. 用途 • 検索エンジン • 価格比較 • 気象データの監視 • サイトの変更検出 • Webサイトの情報解析、研究(比較、分類、統計など) • マッシュアップ
  10. 10. 方法(1) • Webサービス、アプリケーション • Yahoo! Pipes( https://pipes.yahoo.com/ ) • kimono ( https://www.kimonolabs.com/ ) • import.io ( https://import.io/ )
  11. 11. 方法(2) • Ruby • Nokogiri • Mechanize • Perl • Web::Scraper • JavaScript • CasperJS
  12. 12. Pythonでのスクレイピング • 標準ライブラリ • BeautifulSoup • pyquery • Scrapy(スクレピー、スクラパイ、スクレパイ)
  13. 13. Python • バッテリー付属言語
  14. 14. 標準ライブラリ • Pythonの標準ライブラリはとても充実している • ネットワーク、正規表現ライブラリ • Pythonの処理系だけあれば良い • 簡単なスクレイピングであれば十分実用的
  15. 15. サンプル import re, urllib2 res = urllib2.urlopen( http://ll.jus.or.jp/2014/program") pattern_title = re.compile( <title>(.*?)</title>') m = pattern_title.search(res.read()) title = m.group(1) print title >>> プログラム ¦ LL Diver
  16. 16. Beautiful Soup • 2004年からあるライブラリ • HTMLやXMLからデータを抽出して取得できる • 複数のパーサーに対応、パーサーを指定できる • 最新バーションはBeautiful Soup 4系 • Python 2.7、Python 3.2に対応 • スクレイピング
  17. 17. サンプル import urllib2 from bs4 import BeautifulSoup res = urllib2.urlopen( http://ll.jus.or.jp/2014/program ) soup = BeautifulSoup(res.read()) soup.title >>> <title>プログラム ¦ LL Diver</title> for link in soup.find_all( a'): print(link.get( href')) >>> http://ll.jus.or.jp/2014/ >>> http://ll.jus.or.jp/2014/
  18. 18. pyquery • jQuery風にHTML/XML操作が可能 • パーサーにはlxmlを使用(高速) • JQuery風のセレクタを利用できる • スクレイピング
  19. 19. サンプル from pyquery import PyQuery as pq d = pq("http://ll.jus.or.jp/2014/program") print d( title").text() >>> プログラム ¦ LL Diver print d( .entry-title").text() >>> プログラム print d( #day ).text() >>> 昼の部
  20. 20. Scrapy • Scarpyは速くて、ハイレベルなスクレイピング クローラーのフレームワーク。Webサイトのク ロールと、構造化されたデータを取り出すのに 使用する。幅広い目的に使用できる。データマ イニングから、モニタリング、自動テストなど
  21. 21. Scrapyの特徴 • クローリング、スクレイピングフレームワーク • シンプル、拡張性がある • バッテリー付属 • ドキュメント、テストが充実 • コミュニティが活発 • Python2.7のみ対応
  22. 22. Scrapyの主な機能 • Webページからの情報抽出 • Robots.txtのパース • ドメイン、IPアドレス単位のクロール間隔調整 • 並行処理 • エラー時のリトライ(回数を設定) • http://orangain.hatenablog.com/entry/scrapy
  23. 23. アーキテクチャ https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  24. 24. Scrapy Engine https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  25. 25. Scrapy Engine • 全てのコンポーネントを制御するシステム • 特定のアクションが発生したら、イベントを起 こす責任を持つ。
  26. 26. Spider https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  27. 27. Spider • ユーザーが作成するカスタムクラス • 取得したいURL、抽出する項目などを記述する • 取得した内容をスクレイピングして、Itemとし てItem Pipelineに送る
  28. 28. Scheduler https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  29. 29. Scheduler • リクエストのトラフィック等の制御
  30. 30. Downloader https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  31. 31. Downloader • 実際にWebページを取得する • Downloader middlewaresで処理を差し込む事 ができる。(キャッシュなど)
  32. 32. Item Pipeline https://scrapy.readthedocs.org/en/latest/topics/architecture.html
  33. 33. Item Pipeline • スパイダーによって抽出されたアイテムを出力 • データのクレンジング、検証 • 永続化(JSON、File、DB、Mail)など
  34. 34. 手順 • Scrapy プロジェクトの作成 • 抽出するアイテムの定義 • アイテムの抽出とクローリングのためのSpider を作成 • 抽出したアイテムのパイプライン部分作成 • 基本はSpiderとItem部分を書いていけばOK
  35. 35. プロジェクト作成 $ scrapy startproject scrapy_sample $ tree scrapy_sample scrapy_sample/ ├── scrapy.cfg └── scrapy_sample ├── __init__.py ├── items.py ├── pipelines.py ├── settings.py └── spiders └── __init__.py
  36. 36. 抽出するItem定義 class TorrentItem(scrapy.Item): url = scrapy.Field() name = scrapy.Field()
  37. 37. Spider作成 class MininovaSpider(CrawlSpider): name = 'mininova' allowed_domains = ['mininova.org'] start_urls = ['http://www.mininova.org/yesterday/'] rules = [Rule(LinkExtractor(allow=['/tor/d+']), parse_torrent')] ! def parse_torrent(self, response): torrent = TorrentItem() torrent['url'] = response.url torrent['name'] = response.xpath("//h1/text()").extract() return torrent
  38. 38. 実行 $ scrapy crawl mininova -o scraped_data.json $ cat scraped_data.json { "url": "http://www.mininova.org/tor/13277197", "name": ["lady anna voice free plugin VSTI free download new by Softrave ] }, { "url": "http://www.mininova.org/tor/13277195", "name": ["mandala VSTI free download new by Softrave ] },
  39. 39. まとめ • Pythonでスクレイピングを行う場合、色々なア プローチがある。 • 標準のライブラリから、フレームワークまで選 択肢は沢山あるので、要件に合わせて使用すれ ば良い • Pythonに限らず、LL言語はスクレイピング用の ライブラリがたくさん。
  40. 40. 参考URL • 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( 注意事項 )
  41. 41. 宣伝 • PyCon JP 2014は来月開催です。
  42. 42. 宣伝 • https://pycon.jp/2014/ • 9/12 (金)∼ 9/15(月)の4日間 • チュートリアル(9/12) • カンファレンス(9/13、14) • スプリント(9/15) • 絶賛準備中。お待ちしております!
  43. 43. ご静聴ありがとうございました。

×