Tour of Scraping
-
Upload
kenta-yonekura -
Category
Technology
-
view
10.808 -
download
3
description
Transcript of Tour of Scraping
実践!Web Scrapingyoneken(@k_yone)
/33
目次
「うぇぶすくれいぴんぐ」って何?
どんなことができるの?
誰が使ってるの?
どうやってやるの? 本日のメイン
2
/33
Web Scrapingとは
ウェブサイトから情報を抽出するコンピュータソフトウェア技術.
(Wikipediaより)
Web ・みんな大好き人類の知識の宝庫.
Scrape ・~を削ってきれいにする.
英語では,Web harvestingや,Web data extractionとも.
こと
3
/33
どんなことができるの?
Webの情報を,(半)自動的に集めて利用する.
例.
更新前のWebページの状態を保存する.
必要な情報を抽出して読みやすいページに加工する.
複数ページを見やすいように1ページにまとめる.
ページ間のリンク情報から,関連性を数値化する.
4
/33
誰がつかってるの?ウェブ魚拓(http://megalodon.jp/)更新前のWebページの状態を保存する.
頻繁に更新されるWebページ(新聞社のページ,個人のブログ等)のスクラップとして利用されている.
5
/33
誰がつかってるの?iPhone Safari Reader(http://www.apple.com/jp/safari/features.html#browsing)
必要な情報を抽出して読みやすいページに加工する.
余分な装飾や広告を省いて,読み易く加工している.
6
/33
誰がつかってるの?NAVERまとめ(http://matome.naver.jp/)複数ページを見やすいように1ページにまとめる.
異なるWebページに同じ話題が分散している場合に1つにまとめる場合や,ある話題について,Twitter等の個人の反応を同時に掲載する場合に利用されている.
7
/33
誰がつかってるの?Google(https://www.google.co.jp/)
ページ間のリンク情報から,関連性を数値化する.
Googleは検索エンジンで上位に表示されるページを決定するため,ページ間のリンク情報から各々のページの重要度を算出している.
8
/33
Web Scrapingについてのまとめ
スクレイピングは,Web上の情報を2次利用する技術についての総称.
様々な会社がスクレイピングを利用して,Webブラウジングするのに便利なサービスを提供している.
9
/33
問題提起
こんなに便利なスクレイピング. 自分(個人)も使えたら便利じゃない?
10
/33
答えそうなんです!
スクレイピングの技術を身につければ,Webからの情報収集の効率が,ケタ違いに上がります.プログラムも駆使すると,人外の域まで到達できます.お手軽にハッカーになったような気分にひたれます(笑) 11
/33
スクレイピングの理論
12
コンテンツサーバー
クライアント
HTTPプロトコルwww.google.com のページをちょうだい
はいよ.<!DOCTYPE> (ソース)
さっきのソース中のphoto.jpgをちょうだい
はいよ.
HTTPプロトコルに沿っている限り,サーバーからは何からのアクセスも同じに見える.
•Webブラウザ•ターミナル•その他のアプリ
/33
どうやってやるの?
ブラウザの機能を使う方法.
スクレイピングするWebサービス(マッシュアップサービス)を使う方法.
自前でプログラムを作る方法.
自由度 小
自由度 大
13
/33
ブラウザの機能を使ったスクレイピング
印刷.コピー&ペースト.
アドオンを導入する.ソースを直接読む,加工する.
Greasemonkeyを使う.
初級者
中級者
上級者
14
/33
ブラウザの機能を使ったスクレイピング初級者編
ブラウザで見ているページは,印刷するとノートに貼ったりマーカーで線を引いたりできます.便利ですね(棒読み).
どこぞのリンク集から,それぞれのページの連絡先をコピー&ペーストでせっせと集めている人がいました.大変そうだなぁ.
このページ,解説なし.15
/33
ブラウザの機能を使ったスクレイピング中級者編
アドオンを導入する.
AdBlockというアドオンを導入すると,ブラウジング中のWebページから広告を消せます.
(注)他にも色々な機能を持ったアドオンがあります.
https://chrome.google.com/webstore/detail/adblock/gighmmpiobklfepjocnamgkkbiglidom?hl=ja 16
/33
ブラウザの機能を使ったスクレイピング中級者編
ソースを直接読む,加工する.ブラウジング中に右クリックメニューから,「ページのソースを表示」を選ぶことで,表示されているページのソースを見ることができます.
このソースをメモ帳に貼付けて,検索&置換を繰り返すだけでも,けっこうな情報を取り出せます.ツールが導入できないときに有効.
17
/33
ブラウザの機能を使ったスクレイピング上級者編
Greasemonkeyを使う.Firefoxのアドオンで,ブラウジング中のWebページに対し,任意のjavascriptを走らせることができ,それによって元のページの機能を拡張します.
走らせるスクリプトは,自分で作ってもいいし,
https://userscripts.org/ などで公開もされています.GreaseFireを使うと,現在のページに対応したスクリプトがあれば教えてくれます.
http://dic.nicovideo.jp/a/greasemonkey 18
/33
スクレイピングするWebサービス(マッシュアップサービス)を使う方法.
先に紹介したウェブ魚拓やNAVERまとめの他にも,複数の動画サイトを同じ検索ワードで横断検索したり,各社の旅行サービスを同時に検索して比較したりするWebサービスがあるので,利用してみては.
ちなみに,Twitterのまとめや複数図書館の横断検索は,Web APIという,元のサービスが提供しているAPIを使用しており,生のHTMLを解釈しているわけではないので,一般のWeb Scrapingとはちと違います.
このページ,解説薄し.19
/33
なんであんたスクレイピングなんて解説してんの?実は昔,趣味でユーザースクリプトをソーシャルに共有して,端末やOSやブラウザのしがらみなくどこでも使えるようにするWebアプリケーションを作っていたことがありまして・・.結局,そのアプリ自体は全然流行らせられなかったわけですが今もスクレイピングの案件をもらったりします.
閑話休題
20
/33
スクレイピング有用な技術なので,世の中にはそのためのライブラリがたくさんあります.
Perl Web::Scraper, WWW::Mechanize, ...
Python Beautiful Soup, Scrapy, PyQuery, ...
Ruby Nokogiri, Mechanize, ...
自前でプログラムを作る方法.
言語処理に秀でたスクリプト言語以外の処理系でスクレイピングのコードを書くのは,あまりお勧めしません.なぜならスクレイピングは本質的にHTML
の言語処理だからです.ヘタな言語を選ぶと,Unicodeの扱いで地獄を見ます.
使ってみた
21
/33
スクレイピングの実例
Yahoo financeから,個別銘柄の時系列株価を取得する.
http://stocks.finance.yahoo.co.jp/stocks/history/?code=3765.Q22
/33
スクレイピング実装の手順
取得したいモノ(単語,データ,リンク等)を明確にする.
それがHTML中に出現する位置を調べる.
コードを書く.
23
/33
スクレイピングの実装手順1
取得したいモノ(単語,データ,リンク等)を明確にする.
ここに並んでいる日付と株価データを取得したい.
24
/33
スクレイピングの実装手順2取得したいモノがHTML中に出現する位置を調べる.
1.HTMLソースの中から,該当箇所を見つける.
2.目印となるidやclassのついたタグを見つける
Firebug等のDOM解析ツールを使うと,要素が見つけや
すくなります.
25
/33
スクレイピングの実装手順3コードを書く.
Scrapyを使う.選定理由:知らないから使ってみたかった.
hxs = HtmlXPathSelector(response)sites = hxs.select('//table[@class="boardFin yjSt marB6"]/tr')for site in sites[1:]:
1.HtmlXPathSelectorにresponseを渡して,HTML構文解析.2.目印となる要素を示すようにXPathを記述.3.最初の要素はデータ要素名なので,読み飛ばす.
26
/33
得られた結果5010行からなる,個別銘柄のデイリー株価CSVデータ.
作成したコードはGitHubに上げてあります( https://github.com/yoneken/finance ).27
/33
スクレイピングができるデータ,できないデータ.できるデータ
通常のページ,会員制ページ,httpsのページなどなど・・.
できないデータ
FlashやJava Appletで構成されたページ.28
/33
過去に作ったもの1マイクロアレイのデータ解析
Webで公開されているデータベースの活用.菌がもつ全遺伝子中から,既知の刺激に活性化する遺伝子をリストアップする.
29
遺伝子2700弱 × 刺激70弱計189,000通り
微生物系の研究室では,このリストを埋める作業を学生が半年から1年かけてやる.
スクレイピングで10分でできるようにしました(ドヤァ
http://www.bioinformatics.org/sammd/
/33
過去に作ったもの2Stirユーザースクリプトをソーシャルに共有する.
•仮想ブラウザの機能を用いて,Web上のコンテンツに対して外部のスクリプトを適用.•ユーザースクリプトの設定は,サーバー上に保存し,端末・OS・ブラウザを越えて利用可能.•未踏ネタ.
30現在は開発休止中.(気が向いたらGoogleAppで最実装したい)
/33
まとめスクレイピングはサーバー側からは,通常のブラウジングと同じように見える.
スクレイピングをすると,Web上にあふれる大量の情報を効率的に利用できる.
スクレイピングの実装は,HTMLの構文解析など,多くが手作業で泥臭い技術.
31
/33
追補スクレイピングが問題となるケースがある.
32
Librahack事件2010年3月頃に岡崎市立中央図書館の蔵書検索システムにアクセス障害が発生し,利用者の一人が逮捕された事件である.利用者に攻撃の意図はなく,また,根本的な原因が図書館側のシステムの不具合にあったことから論議を呼んだ.(Wikipediaより)
教訓•スクレイピングは,1サイトにつき1[リクエスト/秒]程度を目安に,人のリクエストと同じくらいの頻度で行う.•それでも万一,相手のサイトを落としてしまうと,DoS攻撃とみなされ,業務妨害罪で逮捕される可能性がある.
/33
おわりご清聴ありがとうございました.
スクレイピングを使いこなして,一歩進んだWebブラウジングを!
相手のサイトには,迷惑をかけないように気をつけよう☆
33
/33
Scrapyを使ってみた感想インストールが必要.
OSにコマンドとして追加される.
Webページをクローリングして,データを吐き出すことに特化.
既存プログラムに組込むような使い方はできなそう.
34