Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
17HackersLT20180119.pdf
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mkashima
January 19, 2018
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
17HackersLT20180119.pdf
mkashima
January 19, 2018
Other Decks in Technology
See All in Technology
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
110
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
140
How to Design Configuration for Rails Applications
willnet
1
820
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
560
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
140
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
hackers_champloo_2026_tidb
makocchi
0
170
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
440
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
170
Local CI × GitHub Actions
gogutan
2
220
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
The agentic SEO stack - context over prompts
schlessera
0
970
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Designing Experiences People Love
moore
143
24k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Navigating Weather and Climate Data
rabernat
0
560
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
820
Google's AI Overviews - The New Search
badams
0
1.6k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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