LoginSignup
6
6

More than 5 years have passed since last update.

CasperJSでUTF-8以外のサイトのスクレイピングをする

Last updated at Posted at 2015-02-21

CasperJSでUTF-8以外のサイトにアクセスしたとき、
どうもうまくいかない。
すべてのサイトでうまくいかないわけではない。ちゃんとaタグやformにidが振られていれば
ページ遷移はできる。でも、idがないaタグ,formタグの送信、フォームに日本語入れて送信テストとか、どうしてもできないサイトがある
capture()でスクリーンショットをとっても文字化け。

いろいろやってみたけど、ひとつの解決方法を見つけた。
それはプロキシサーバDelegateで文字コード変換プロキシを通すこと。
DelegateでCHARCODEのフィルタを使い、このプロキシを通せば、ShiftJISで記述されたサイトがCasperJS(PhantomJS)で
見るときにはUTF-8に変換されているという形になるので
いつも通りCasperJSが書ける

以下Delegateのインストール手順(CentOS6)とそのプロキシをCasperJSから利用する方法。
makeとかはできる環境の前提で

cd /usr/local/src
wget ftp://ftp.delegate.org/pub/DeleGate/delegate9.9.13.tar.gz
tar zxvf delegate9.9.13.tar.gz
cd delegate9.9.13
make
cp src/delegated /usr/local/sbin/
ln -s /usr/local/sbin/delegated /usr/sbin/
mkdir -p /var/lib/delegate/cache
chown -R nobody:nobody /var/lib/delegate
mkdir -p /etc/delegate/
/etc/delegate/http_to_utf8.conf
#####################################
-P28080
SERVER=http
CHARCODE=UTF-8
RELIABLE="127.0.0.1,192.168.1.*"
LOGFILE="/var/log/delegate/http.log"
PROTOLOG="/var/log/delegate/access.log:%X %D"
ERRORLOG="/var/log/delegate/error.log"
#####################################
/etc/init.d/delegated
#!/bin/sh
#

DELEGATE=/usr/sbin/delegated
CONFDIR=/etc/delegate
DGROOT=/var/spool/delegate-nobody

mkdir -p /var/log/delegate
if [ ! -x $DELEGATE ]; then
    echo -n $"$DELEGATE does not exist."; warning; echo
    exit 0
fi

if [ ! -r $CONFDIR ]; then
    echo -n $"$CONFDIR does not exist."; warning; echo
    exit 0
fi

RETVAL=0
start() {
        echo -n $"Starting up Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          #$DELEGATE -P28080 SERVER=http CHARCODE=UTF-8 LOGFILE="/var/log/delegated" DGROOT=$DGROOT +=$CONFIG
          $DELEGATE DGROOT=$DGROOT +=$CONFIG
          echo
        done
        return 0
}

stop() {
        echo -n $"Shutting down Http DeleGate daemon: "
        for CONFIG in $CONFDIR/*.conf ; do
          $DELEGATE DGROOT=$DGROOT +=$CONFIG -Fkill
          echo
        done
        return 0
}

restart() {
        stop
        start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac

exit 0

このプロキシをCasperJSから利用するには以下
sh
casperjs --proxy=127.0.0.1:28080 test.casper.js --xunit=log.xml

6
6
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
6