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

More Related Content

PDF
FPGAX2019
PDF
FinOpsGreenITについて学んでみた_2024/07/11(木)開催資料
PDF
TYPES DE TEXTES.pdf
PDF
[DL輪読会]Deep Anomaly Detection Using Geometric Transformations
PDF
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
PDF
OWASP Top 10 超初級編 (2021 Ver.)
PDF
Traumato genou
PDF
segmentation-modelsでざっくり動かすセマンティックセグメンテーション(U-Net)
FPGAX2019
FinOpsGreenITについて学んでみた_2024/07/11(木)開催資料
TYPES DE TEXTES.pdf
[DL輪読会]Deep Anomaly Detection Using Geometric Transformations
NVIDIA Seminar ディープラーニングによる画像認識と応用事例
OWASP Top 10 超初級編 (2021 Ver.)
Traumato genou
segmentation-modelsでざっくり動かすセマンティックセグメンテーション(U-Net)

Viewers also liked (12)

PPTX
CasperJSを使って任意のWebサイトを電子書籍化する方法
PDF
ScrapyとPhantomJSを用いたスクレイピングDSL
PDF
オープンデータのためのスクレイピング
PDF
Pythonによるwebアプリケーション入門 - Django編-
PPTX
Pythonスタートアップ勉強会201109 python入門
PDF
Rubyで始めるWebスクレイピング
PDF
Python入門 : 4日間コース社内トレーニング
PDF
「Python言語」はじめの一歩 / First step of Python
PDF
python-twitterを用いたTwitterデータ収集
PDF
PythonによるWebスクレイピング入門
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
Pythonで簡単ネットワーク分析
CasperJSを使って任意のWebサイトを電子書籍化する方法
ScrapyとPhantomJSを用いたスクレイピングDSL
オープンデータのためのスクレイピング
Pythonによるwebアプリケーション入門 - Django編-
Pythonスタートアップ勉強会201109 python入門
Rubyで始めるWebスクレイピング
Python入門 : 4日間コース社内トレーニング
「Python言語」はじめの一歩 / First step of Python
python-twitterを用いたTwitterデータ収集
PythonによるWebスクレイピング入門
Python 機械学習プログラミング データ分析ライブラリー解説編
Pythonで簡単ネットワーク分析
Ad

Similar to 続Pythonによるwebスクレイピング入門 (12)

PDF
スクレイピングとPython
PPTX
PythonによるWebスクレイピング勉強会
PPTX
スクレイピングをやってみた
PPTX
Webクローリング&スクレイピングの最前線 公開用
PDF
Tour of Scraping
PDF
不純な動機で「puppeteer」 でスクレイピングを始めてみた
PPTX
スクレイピングは避けられない
PDF
スクレイピングのススメ
PDF
Lispmeetup #56 Common lispによるwebスクレイピング技法
PDF
Anemoneによるクローラー入門
PPTX
これからの「スクレイピング」の話をしよう
PDF
20190202 powerbi scraping
スクレイピングとPython
PythonによるWebスクレイピング勉強会
スクレイピングをやってみた
Webクローリング&スクレイピングの最前線 公開用
Tour of Scraping
不純な動機で「puppeteer」 でスクレイピングを始めてみた
スクレイピングは避けられない
スクレイピングのススメ
Lispmeetup #56 Common lispによるwebスクレイピング技法
Anemoneによるクローラー入門
これからの「スクレイピング」の話をしよう
20190202 powerbi scraping
Ad

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