SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
PythonによるWebスクレイピング入門
Report
Hironori Sekine
Follow
Aug. 23, 2014
•
0 likes
•
105,528 views
1
of
43
PythonによるWebスクレイピング入門
Aug. 23, 2014
•
0 likes
•
105,528 views
Download Now
Download to read offline
Report
Engineering
PythonによるWebスクレイピング入門
Hironori Sekine
Follow
Recommended
なぜコンピュータを学ばなければならないのか 21世紀の君主論
Tokoroten Nakayama
91.8K views
•
58 slides
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
53.3K views
•
243 slides
解説!30分で分かるLEAN ANALYTICS
しくみ製作所
7K views
•
29 slides
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
Tokoroten Nakayama
160.8K views
•
86 slides
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
Tokoroten Nakayama
19.9K views
•
72 slides
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
164.5K views
•
67 slides
More Related Content
What's hot
シリコンバレーの「何が」凄いのか
Atsushi Nakada
183.4K views
•
77 slides
「いい検索」を考える
Shuryo Uchida
13.3K views
•
78 slides
ChatGPTは思ったほど賢くない
Carnot Inc.
4.4K views
•
30 slides
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
121.4K views
•
99 slides
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
103.8K views
•
52 slides
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
Tokoroten Nakayama
18.2K views
•
24 slides
What's hot
(20)
シリコンバレーの「何が」凄いのか
Atsushi Nakada
•
183.4K views
「いい検索」を考える
Shuryo Uchida
•
13.3K views
ChatGPTは思ったほど賢くない
Carnot Inc.
•
4.4K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
•
121.4K views
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
•
103.8K views
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
Tokoroten Nakayama
•
18.2K views
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
•
187.9K views
推薦アルゴリズムの今までとこれから
cyberagent
•
29.5K views
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Takahiko Ito
•
1.3K views
トピックモデルの評価指標 Perplexity とは何なのか?
hoxo_m
•
44.1K views
マッチングサービスにおけるKPIの話
cyberagent
•
70.2K views
リクルート式 自然言語処理技術の適応事例紹介
Recruit Technologies
•
39.1K views
あなたのチームの「いい人」は機能していますか?
Minoru Yokomichi
•
169.4K views
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
•
22.9K views
型安全性入門
Akinori Abe
•
7.2K views
逆説のスタートアップ思考
Takaaki Umada
•
481.1K views
機械学習で泣かないためのコード設計
Takahiro Kubo
•
60.7K views
AWSではじめるMLOps
MariOhbuchi
•
3K views
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama
•
26.1K views
ユーザーインタビューするときは、どうやらゾンビのおでましさ
Yoshiki Hayama
•
8.3K views
Viewers also liked
python-twitterを用いたTwitterデータ収集
Hikaru Takemura
68.8K views
•
18 slides
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
65.9K views
•
88 slides
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
101.1K views
•
86 slides
Pythonで簡単ネットワーク分析
antibayesian 俺がS式だ
75.6K views
•
10 slides
10分でわかるPythonの開発環境
Hisao Soyama
132.3K views
•
33 slides
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
71.4K views
•
100 slides
Viewers also liked
(20)
python-twitterを用いたTwitterデータ収集
Hikaru Takemura
•
68.8K views
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
•
65.9K views
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
•
101.1K views
Pythonで簡単ネットワーク分析
antibayesian 俺がS式だ
•
75.6K views
10分でわかるPythonの開発環境
Hisao Soyama
•
132.3K views
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
•
71.4K views
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
Shinichi Nakagawa
•
103.1K views
Python東海Vol.5 IPythonをマスターしよう
Hiroshi Funai
•
52.3K views
RとPythonによるデータ解析入門
Atsushi Hayakawa
•
87.4K views
Scikit learnで学ぶ機械学習入門
Takami Sato
•
98K views
scikit-learnを用いた機械学習チュートリアル
敦志 金谷
•
212.4K views
Gensim
saireya _
•
55.2K views
Python入門 : 4日間コース社内トレーニング
Yuichi Ito
•
344.6K views
DBエンジニアに必要だったPythonのスキル
Satoshi Yamada
•
2.2K views
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
infinite_loop
•
6.9K views
ソフトシンセを作りながら学ぶPythonプログラミング
Ransui Iso
•
33.5K views
Requestsで始める5分前帰社
Satoshi Yamada
•
5.4K views
Pythonスタートアップ勉強会201109 python入門
Takayuki Shimizukawa
•
13K views
Pythonによるwebアプリケーション入門 - Django編-
Hironori Sekine
•
28K views
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
•
8.4K views
Similar to PythonによるWebスクレイピング入門
クラウド運用のためのストリームマイニング
Shin Matsumoto
687 views
•
23 slides
Data Scientist Workbench - dots0729
s. kaijima
1.8K views
•
36 slides
概説 Data API v3
Yuji Takayama
1.6K views
•
46 slides
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
4.8K views
•
40 slides
Tech fun rails_workshop
OMEGA (@equal_001)
1.7K views
•
30 slides
実践!AWSクラウドデザインパターン
Hiroyasu Suzuki
15.8K views
•
115 slides
Similar to PythonによるWebスクレイピング入門
(20)
クラウド運用のためのストリームマイニング
Shin Matsumoto
•
687 views
Data Scientist Workbench - dots0729
s. kaijima
•
1.8K views
概説 Data API v3
Yuji Takayama
•
1.6K views
地方企業がソーシャルゲーム開発を成功させるための10のポイント
Kentaro Matsui
•
4.8K views
Tech fun rails_workshop
OMEGA (@equal_001)
•
1.7K views
実践!AWSクラウドデザインパターン
Hiroyasu Suzuki
•
15.8K views
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
•
5.2K views
続Pythonによるwebスクレイピング入門
Hironori Sekine
•
20.5K views
ASP.NET Core 概要(2017年3月時点)
Atsushi Yokohama (BEACHSIDE)
•
1.1K views
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
•
18.9K views
Isomorphic web development with scala and scala.js
TanUkkii
•
23.5K views
Building modernapplicationwithelasiccloud
Shotaro Suzuki
•
587 views
NAVERまとめの裏側
Hiroshi Chiyokawa
•
2.3K views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
11 views
Swagger jjug ccc 2018 spring
kounan13
•
2.6K views
インドのインターネット環境との戦い方
健一 辰濱
•
2.5K views
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
•
862 views
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Shotaro Suzuki
•
633 views
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
•
38.1K views
Rubyで作るtwitter風webアプリケーション
Naoto Hori
•
3K views
PythonによるWebスクレイピング入門
1.
Pythonによる Webスクレイピング入門 関根裕紀
2.
自己紹介 • 関根裕紀(せきね ひろのり) •
アライドアーキテクツ株式会社 • ソフトウェア・エンジニア • PyCon JP 2014 スタッフ • Twitter(@checkpoint )
3.
• 前職まで • RSSリーダー、SNS •
WebMail • 写真共有サービス • 現在(アライドアーキテクツ) • モニプラFacebook、Social-IN • Webアプリケーション開発全般を担当 経歴
4.
アジェンダ • Webスクレイピングとは • PythonでのWebスクレイピング •
ライブラリの紹介、サンプル(入門編)
5.
Webスクレイピングとは? Webスクレイピングとは、WebサイトからWebページのHTMLデータを収 集して、特定のデータを抽出、整形し直すことである。 ! Webスクレイピングを行うことで、Webページを対象として、あたかも Web APIを利用しているかのようにデータを効率的に取得・収集することが 可能になる。用途の例としては、部分的にコンテンツを取り出して携帯電話 向けのコンテンツを生成したり、小見出しの一覧を生成したり、といった使 い方あある。Webスクレイピングは様々な手段で実現可能であるが、PHPや Perlといったスクリプト言語を使用して行われることが多い。 ! IT用語辞典 ( http://www.sophia-it.com/content/Webスクレイピング
) より
6.
Webスクレイピング • WebサイトからHTMLのデータを収集 • 特定のデータを抽出、加工 •
抽出したデータを再利用 • クローリング + スクレイピング
7.
クローリング • 英語の意味は、[ はう、ゆっくり進む] •
Webページのリンクの内容をたどる • Webページの内容をダウンロードして収集 • クローラー、スパイダーと呼ばれる
8.
スクレイピング • 英語の意味は、[ 削ること
] • ページの内容から、必要な情報を抽出すること
9.
用途 • 検索エンジン • 価格比較 •
気象データの監視 • サイトの変更検出 • Webサイトの情報解析、研究(比較、分類、統計など) • マッシュアップ
10.
方法(1) • Webサービス、アプリケーション • Yahoo!
Pipes( https://pipes.yahoo.com/ ) • kimono ( https://www.kimonolabs.com/ ) • import.io ( https://import.io/ )
11.
方法(2) • Ruby • Nokogiri •
Mechanize • Perl • Web::Scraper • JavaScript • CasperJS
12.
Pythonでのスクレイピング • 標準ライブラリ • BeautifulSoup •
pyquery • Scrapy(スクレピー、スクラパイ、スクレパイ)
13.
Python • バッテリー付属言語
14.
標準ライブラリ • Pythonの標準ライブラリはとても充実している • ネットワーク、正規表現ライブラリ •
Pythonの処理系だけあれば良い • 簡単なスクレイピングであれば十分実用的
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.
Beautiful Soup • 2004年からあるライブラリ •
HTMLやXMLからデータを抽出して取得できる • 複数のパーサーに対応、パーサーを指定できる • 最新バーションはBeautiful Soup 4系 • Python 2.7、Python 3.2に対応 • スクレイピング
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.
pyquery • jQuery風にHTML/XML操作が可能 • パーサーにはlxmlを使用(高速) •
JQuery風のセレクタを利用できる • スクレイピング
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.
Scrapy • Scarpyは速くて、ハイレベルなスクレイピング クローラーのフレームワーク。Webサイトのク ロールと、構造化されたデータを取り出すのに 使用する。幅広い目的に使用できる。データマ イニングから、モニタリング、自動テストなど
21.
Scrapyの特徴 • クローリング、スクレイピングフレームワーク • シンプル、拡張性がある •
バッテリー付属 • ドキュメント、テストが充実 • コミュニティが活発 • Python2.7のみ対応
22.
Scrapyの主な機能 • Webページからの情報抽出 • Robots.txtのパース •
ドメイン、IPアドレス単位のクロール間隔調整 • 並行処理 • エラー時のリトライ(回数を設定) • http://orangain.hatenablog.com/entry/scrapy
23.
アーキテクチャ https://scrapy.readthedocs.org/en/latest/topics/architecture.html
24.
Scrapy Engine https://scrapy.readthedocs.org/en/latest/topics/architecture.html
25.
Scrapy Engine • 全てのコンポーネントを制御するシステム •
特定のアクションが発生したら、イベントを起 こす責任を持つ。
26.
Spider https://scrapy.readthedocs.org/en/latest/topics/architecture.html
27.
Spider • ユーザーが作成するカスタムクラス • 取得したいURL、抽出する項目などを記述する •
取得した内容をスクレイピングして、Itemとし てItem Pipelineに送る
28.
Scheduler https://scrapy.readthedocs.org/en/latest/topics/architecture.html
29.
Scheduler • リクエストのトラフィック等の制御
30.
Downloader https://scrapy.readthedocs.org/en/latest/topics/architecture.html
31.
Downloader • 実際にWebページを取得する • Downloader
middlewaresで処理を差し込む事 ができる。(キャッシュなど)
32.
Item Pipeline https://scrapy.readthedocs.org/en/latest/topics/architecture.html
33.
Item Pipeline • スパイダーによって抽出されたアイテムを出力 •
データのクレンジング、検証 • 永続化(JSON、File、DB、Mail)など
34.
手順 • Scrapy プロジェクトの作成 •
抽出するアイテムの定義 • アイテムの抽出とクローリングのためのSpider を作成 • 抽出したアイテムのパイプライン部分作成 • 基本はSpiderとItem部分を書いていけばOK
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.
抽出するItem定義 class TorrentItem(scrapy.Item): url =
scrapy.Field() name = scrapy.Field()
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.
実行 $ 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.
まとめ • Pythonでスクレイピングを行う場合、色々なア プローチがある。 • 標準のライブラリから、フレームワークまで選 択肢は沢山あるので、要件に合わせて使用すれ ば良い •
Pythonに限らず、LL言語はスクレイピング用の ライブラリがたくさん。
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.
宣伝 • PyCon JP
2014は来月開催です。
42.
宣伝 • https://pycon.jp/2014/ • 9/12
(金)∼ 9/15(月)の4日間 • チュートリアル(9/12) • カンファレンス(9/13、14) • スプリント(9/15) • 絶賛準備中。お待ちしております!
43.
ご静聴ありがとうございました。