Help us understand the problem. What is going on with this article?

PhantomJSでスクレイピングしてみる

More than 1 year has passed since last update.

HTMLの情報を取得したいけど、欲しい情報はjavascript等でレンダリング後の情報というのはよくある話です。
毎回手動で取ってくるのは面倒、そういう時に便利なのがPhantomJSです。
つい最近自分も使ってみたので、誰かの参考になればと思いメモとして残します。

動作環境

Amazon Linux AMI release 2018.03
composer 1.5.1

PhantomJSインストール

$ cd /usr/local/src
$ sudo wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
$ sudo tar jxfv phantomjs-2.1.1-linux-x86_64.tar.bz2
$ sudo ln -s /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs

バージョンを確認し表示されればインストール完了

$ phantomjs -v
2.1.1

ソースコード取得

javascriptでスクレイピングするソースを作成します。(例で「http://google.com」のソースを取得)

hello.js
var page = require("webpage").create();
var system = require("system");

page.open("http://google.com", function(status){
    if (status === "success") {
        console.log(page.content);
    }
    phantom.exit();
});

上記のファイルをサーバに設置し、以下のコマンドを実行するとソースコードが表示されます。

phantomjs hello.js

なおHTMLをファイルに保存する場合は単純に

phantomjs hello.js > hello.html

とすればOKです。

画面キャプチャ取得

対象ページの画面キャプチャを撮りたい時は「page.render」を使います。
引数にはキャプチャ画像のファイル名を入力します。

hello_image.js
var page = require("webpage").create();
var system = require("system");

page.open("http://google.com", function(status){
    if (status === "success") {
        page.render('google.png');
    }
    phantom.exit();
});

実行はソースコードの時と同じですが、日本語フォントがサーバに入っていなければ文字化けします。

取得できない時

通信がうまくいかない時は以下のコマンドを打ってみます。

curl -v [URL]

※[URL]には取得対象サイトのURLを入力。

エラーが出る、またはレスポンスがない場合はSSL Protocolエラーの可能性があるので、「--tlsv1」オプションを追加して実行してみます。

curl -v --tlsv1 [URL]

これでレスポンスが返ってきた場合はPhantomJSコマンドを以下のようにして実行します。

phantomjs --ssl-protocol=tlsv1 [JSファイル]

無事取得できたらhtmlが出力されます。

_hmsk_
elife
デジタルマーケティングのトータルソリューションを提供するマーケティングコンサルティング会社
https://www.elife.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away