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

Viewers also liked (8)

Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
Takayuki Shimizukawa
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
Hikaru Takemura
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
 
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
antibayesian 俺がS式だ
 
Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門Pythonスタートアップ勉強会201109 python入門
Pythonスタートアップ勉強会201109 python入門
Takayuki Shimizukawa
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
Takuro Sasaki
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
Hikaru Takemura
 
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
 

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

スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
Hironori Sekine
 
PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会
淳子 土肥
 
スクレイピングをやってみた
スクレイピングをやってみたスクレイピングをやってみた
スクレイピングをやってみた
憲 山本
 
Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
 
Tour of Scraping
Tour of ScrapingTour of Scraping
Tour of Scraping
Kenta Yonekura
 
不純な動機で「puppeteer」 でスクレイピングを始めてみた
不純な動機で「puppeteer」 でスクレイピングを始めてみた不純な動機で「puppeteer」 でスクレイピングを始めてみた
不純な動機で「puppeteer」 でスクレイピングを始めてみた
anysense_ss
 
スクレイピングは避けられない
スクレイピングは避けられないスクレイピングは避けられない
スクレイピングは避けられない
Daiki Kojima
 
スクレイピングのススメ
スクレイピングのススメスクレイピングのススメ
スクレイピングのススメ
Tomoki Hasegawa
 
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Satoshi imai
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
 
これからの「スクレイピング」の話をしよう
これからの「スクレイピング」の話をしようこれからの「スクレイピング」の話をしよう
これからの「スクレイピング」の話をしよう
iPride Co., Ltd.
 
20190202 powerbi scraping
20190202 powerbi scraping20190202 powerbi scraping
20190202 powerbi scraping
良一 駒板
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
Hironori Sekine
 
PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会
淳子 土肥
 
スクレイピングをやってみた
スクレイピングをやってみたスクレイピングをやってみた
スクレイピングをやってみた
憲 山本
 
Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用Webクローリング&スクレイピングの最前線 公開用
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
 
不純な動機で「puppeteer」 でスクレイピングを始めてみた
不純な動機で「puppeteer」 でスクレイピングを始めてみた不純な動機で「puppeteer」 でスクレイピングを始めてみた
不純な動機で「puppeteer」 でスクレイピングを始めてみた
anysense_ss
 
スクレイピングは避けられない
スクレイピングは避けられないスクレイピングは避けられない
スクレイピングは避けられない
Daiki Kojima
 
スクレイピングのススメ
スクレイピングのススメスクレイピングのススメ
スクレイピングのススメ
Tomoki Hasegawa
 
Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法Lispmeetup #56 Common lispによるwebスクレイピング技法
Lispmeetup #56 Common lispによるwebスクレイピング技法
Satoshi imai
 
Anemoneによるクローラー入門
Anemoneによるクローラー入門Anemoneによるクローラー入門
Anemoneによるクローラー入門
Tasuku Nakano
 
これからの「スクレイピング」の話をしよう
これからの「スクレイピング」の話をしようこれからの「スクレイピング」の話をしよう
これからの「スクレイピング」の話をしよう
iPride Co., Ltd.
 
20190202 powerbi scraping
20190202 powerbi scraping20190202 powerbi scraping
20190202 powerbi scraping
良一 駒板
 
Ad

Recently uploaded (8)

2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
NU_I_TODALAB
 
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
NU_I_TODALAB
 
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
NU_I_TODALAB
 
AIDemucs-set-up-guide-on-apple-silicon.pdf
AIDemucs-set-up-guide-on-apple-silicon.pdfAIDemucs-set-up-guide-on-apple-silicon.pdf
AIDemucs-set-up-guide-on-apple-silicon.pdf
hirokiabe58
 
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHubwallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
K Kinzal
 
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
anubis_369
 
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdfe2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
hirokiabe58
 
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdfREVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
LuisAlbertoOrtegaVeg1
 
2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
2025年3月音楽情報科学研究会「大局的構造生成のための小節特徴量系列モデリングに基づく階層的自動作曲」
NU_I_TODALAB
 
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
2025年5月応用音響研究会「ICASSP2025における異常音検知の動向」
NU_I_TODALAB
 
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
2025年5月応用音響研究会「ICASSP2025における音楽情報処理の動向」
NU_I_TODALAB
 
AIDemucs-set-up-guide-on-apple-silicon.pdf
AIDemucs-set-up-guide-on-apple-silicon.pdfAIDemucs-set-up-guide-on-apple-silicon.pdf
AIDemucs-set-up-guide-on-apple-silicon.pdf
hirokiabe58
 
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHubwallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
wallet-standardで始めるウォレット実装 - Solana Developer Hub Online11 #SolDevHub
K Kinzal
 
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
情シスがRedmineでPC管理を立て直した話 2025年5月31日(土) 13:00 〜 13:45
anubis_369
 
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdfe2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
e2zgvpmeefekeoekeokoeoekewassa4jfstg6p.pdf
hirokiabe58
 
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdfREVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
REVISION EXAMEN PARCIAL INGENIERIA EN PETROLEOS.pdf
LuisAlbertoOrtegaVeg1
 
Ad

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