Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
17HackersLT20180119.pdf
Search
mkashima
January 19, 2018
Technology
0
100
17HackersLT20180119.pdf
mkashima
January 19, 2018
Tweet
Share
Other Decks in Technology
See All in Technology
このままAIが発展するだけでAGI達成可能な理由
frievea
0
120
データ戦略部門 紹介資料
sansan33
PRO
1
3.8k
ビズリーチ求職者検索におけるPLMとLLMの活用 / Search Engineering MEET UP_2-1
visional_engineering_and_design
1
150
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
1k
技育祭2025【秋】 企業ピッチ/登壇資料(高橋 悟生)
hacobu
PRO
0
110
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
250
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
190
防災デジタル分野での官民共創の取り組み (2)DIT/CCとD-CERTについて
ditccsugii
0
310
セキュアな認可付きリモートMCPサーバーをAWSマネージドサービスでつくろう! / Let's build an OAuth protected remote MCP server based on AWS managed services
kaminashi
3
350
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
リセラー企業のテクサポ担当が考える、生成 AI 時代のトラブルシュート 2025
kazzpapa3
1
370
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3.5k
Featured
See All Featured
Faster Mobile Websites
deanohume
310
31k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How GitHub (no longer) Works
holman
315
140k
Side Projects
sachag
455
43k
Unsuck your backbone
ammeep
671
58k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The World Runs on Bad Software
bkeepers
PRO
72
11k
A Tale of Four Properties
chriscoyier
161
23k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Thoughts on Productivity
jonyablonski
70
4.9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Transcript
PhantomJSで 快適スクレイピング生活 株式会社オールアバウト 鹿島真人 1
自己紹介 名前 鹿島 真人(カシマ マコト) 仕事 2017~ マークアップエンジニア・UXデザイン 2018~ 広告配信システムの運用
趣味 筋トレ 推し 黒澤ルビィ 2
Agenda PhantomJSとは PhantomJSを使った理由 PhantomJSでできること PhatomJSのDos&Don'ts 3
PhantomJSとは 4
PhantomJSとは コマンドラインから動くWebブラウザ(ヘッドレスブラウザ)。 $ phantomjs example.js // example.js var page =
require('webpage').create(); // おまじない page.open('http://google.com', function (status) { // Page Opened! }); 上記のようなコードを介してスクレイピング(Webサイトに外部 からアクセスして情報収集)できるツール。 5
PhantomJSを使った理由 6
PhantomJSを使った理由 データを分析して商品紹介サイトのCTR改善施策を打ちたい 仮説 → データ出し → 仮説検証 → フィードバック →
仮説 → … 仮説 紹介商品数が多い方が良いのでは? 商品情報欄の文字数が多い方が良いのでは? 最初の購買ボタンまでの冒頭の長さとCTRが関係あるのでは? etc... 7
PhantomJSを使った理由 必要な情報の例 記事ID CTR 商品数 商品情報の文字数 最初の商品までの距離 1 15% 12個
528文字 1280px 自サイトのDBでも集計ツールでも取れないデータがある DBで取れても、毎回エンジニアに依頼するとスピード感を損 なう 8
PhantomJSを使った理由 他サイトの情報もとってみたい 競合サイトはどんなコンテンツを作っている? 競合サイトの見出しやタイトルでのSEO対策はどうなっている? → スクレイピングしよう!! 9
PhantomJSでできること 10
PhantomJSでできること 基本のつかいかた require('webpage') でWebページのオブジェクトを作成。 var page = require('webpage').create(); open(url, callback())
Webページを開く。 page.open('http://google.com', function (status) { }); 11
PhantomJSでできること render() でスクリーンショットがとれる。 var page = require('webpage').create(); page.open('http://google.com', function (status)
{ page.viewportSize = {width:'800px', height:'600px'}; page.render('output.png'); }); 12
PhantomJSでできること settings.userAgent でUserAgent偽装 var page = require('webpage').create(); page.open('http://google.com', function (status)
{ page.viewportSize = {width:'800px', height:'600px'}; page.settings.userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'; // iOS11 の Safari に偽装 page.render('output.png'); }); 実演 13
PhantomJSでできること evaluate() ページ内でJSを走らせる。 includeJS() 外部ライブラリの読み込み。 page.open('http://google.com', function (status) { page.includeJs('../lib/jquery.min.js',
function() { // JQueryを読み込み page.evaluate(function() { // アクセスしたページで実行 console.log($('.foo').text()); }); }); }); DOM要素の中身を取ってきたりするのに使える。 ex) 記事の小見出しを全取得、特定のクラスを持つ要素のテキストを全取得 実演 14
PhantomJSでできること POST通信もできる open() に引数としてメソッド、データ、ヘッダーを渡す var data = {"kurosawa": "ruby", "kunikida":
"hanamaru"}; var headers = {"Content-Type": "application/json"}; var server = "http://posttestserver.com/post.php?dump"; page.open(server, 'POST', data, headers, function (status) { // POST 通信 }); 15
PhantomJSでできること そのほか addCookie() でCookie追加/削除 deleteCookie() で特定Cookie削除 . ファイルシステムのモジュールも用意 var fs
= require('fs'); fs.read('input.csv'); fs.write('output.csv', data); 16
PhantomJS の Dos&Dont's 17
Dos&Dont's DOMの情報を取得したい // DONT var foo; page.evaluate(function () { foo
= $('.bar').text(); }); // evaluateの外側にアクセスできない! // DO var getFoo = page.evaluate(function () { var foo = $('.bar').text(); return foo; }); // 関数の返り値として受け取る。 18
Dos&Dont's evaluate() 中に、コマンドラインにconsoleを出したい // DONT page.evaluate(function () { console.log('evaluateなう'); });
// コマンドラインには表示されない! // DO page.onConsoleMessage = function(msg, lineNum, sourceId) { console.log(msg); }; page.evaluate(function () { console.log('evaluateなう'); }); // onConsoleMessage() を使う。 19
Dos&Dont's for文で複数URLまわしたい // DONT for (var i = 0; i
< urls.length; i++) { page.open(urls[i], function (status) { }); } // page.openは非同期のため、for文が先に回ってしまう! // DO function process() { page.open(urls[0], function (status) { urls.shift(); process(); }); } // 順番に実行される。 20
まとめ 21
まとめ PhantomJSはコマンドラインから実行するヘッドレスブラウ ザ。 Webスクレイピングに使える。 . webpage モジュールに用意されてるメソッドを使って、色々で きる。 とくに evaluate()
はページ内でJSを実行できるので、ページ 上でJSでできることはなんでもできる。 . Web上の情報を快適に自動収集できる。 22
注意 23
NOTICE! Webスクレイピングは一部で法律関係の議論があります アクセスが攻撃にならないように注意 Librahack事件 音声や動画のダウンロードには注意 違法コンテンツダウンロード刑罰化 24
さいごに 25
専門家が選ぶお買い物情報メディア 26