LoginSignup
6
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-11

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が出力されます。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7