2017年09月23日

Windos7からHTML::TreeBuilderを使ってPerlでスクレイピング

Strawberry Perl Portable Editionを使ってWindows7からウェブスクレイピングで悩んだのでそのまとめ
ではじめてLWP::UserAgent;とHTML::TreeBuilder;を使えば比較的簡単にPerlを使用してWebデータを引っ張ってくることが出来る事を勉強したのだが、ただ単純にコピペしただけでは文字化けになってしまった。
2017-09-23_15-19-25.jpg
まあWebから拾ってくる文字コードがたぶんUTF-8あたりでWindows7ではsjisかcp932で出力してやれば正常に出てくるバズ。
とタカをくくってプログラム作ったけど文字化けが止まらない。

PerlをWin7で使う場合には文字コードを厳密に理解して使わないと、文字バケが止まらなくなってしまう。
ググってみると同じ様な悩みの人がいて、解決した記事を見つけたのですが

これを更に参考にして、自分流でコードを書き直してみた

 
use strict;
use warnings;

# 文字列リテラルを flagged utf8 として扱うプラグマ
use utf8;
# デコード/エンコード のためのモジュール
use Encode;

use LWP::UserAgent;
use HTML::TreeBuilder;

# urlを指定する
my $url = 'http://www.yahoo.co.jp';

# IE8のフリをする
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";

# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new('agent' => $user_agent);
my $res = $ua->get($url);
my $content = $res->content;

#ファイルの文字列をエンコードして読み込む(flagged utf8 に変換する/入力はutf8)
$content = decode('utf8', $content);

# HTML::TreeBuilderで解析する
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);

# DOM操作してトピックの部分だけ抜き出す。
my @items = $tree->look_down('id', 'topicsfb')->find('li');
print encode('cp932',$_->as_text."\n") for @items;


文字コードをPerlで扱うためにフラグ付きUTF8で処理したらうまくいった。
# 文字列リテラルを flagged utf8 として扱うプラグマ
use utf8;
# デコード/エンコード のためのモジュール
use Encode;
で宣言をします。

Webでスクレイピングしてきた文字コードはutf8なので、utf8文字列(入力)→フラグ付きutf8へ(内部コードへ変換)します。
#ファイルの文字列をエンコードして読み込む(flagged utf8 に変換する/入力はutf8)
$content = decode('utf8', $content);

そうして、解析処理を行い最終出力でフラグ付きutf8からフラグ無しutf8へ変換し、最終出力でcp932へエンコードしてからPrintします
print encode('cp932',$_->as_text."\n") for @items;
こでれうまくWin7上での表示が出来ました。
続きを読む
posted by トシ at 15:14| Comment(0) | Perl

2017年08月27日

Acronis True Image 2017 ダウンロード版

2017-08-27_12-36-34.jpg

ソースネクストからAcronis True Image 2017が安いよというメールが届いた。このソフトはHDDのバックアップのソフトでパソコンのHDDが壊れるまえにクローンを取っておいたりするソフトである。
そもそも定価が¥4980が特価で¥1,780となり、割引券が使えたので¥922で購入することが出来た。


続きを読む
posted by トシ at 12:53| Comment(0) | 日記

2017年08月14日

君の名は借りてみた(スポンサー)

2017-08-14_16-51-50.jpg
スポンサーの部分はちゃんと存在している会社&商品名が出るんですね
posted by トシ at 16:53| Comment(0) | 日記