http://q.hatena.ne.jp/1218906142
に目を通していただけるとありがたいです。掲示板のデータを取得して、正規表現でシリアル、タイトル、名前、日付、書き込み内容を抜き出して保存したいと考えています。前回は1件だけ取得するところまではOKでしたが、ループで回していくと、書き込み内容の部分だけ、マッチしたりしなかったりします。しかも、実行するたびにマッチする行、しない行が違ってきたりします(例えば10回フープすれば2,3,5,6行だけしない、など)。何度も見直したのですが、なぜ同条件でこういった結果になるのかが分かりません。何かこういう問題を引き起こす原因に心当たりがありましたら、ご指摘ください。
字数制限でコードや実行結果を書けませんが、お答えいただければコメントで詳しくお伝えできると思います。完全に行き詰まってしまいました。どうか宜しくお願いします。
前回質問のサンプルソースでページの取得にわざわざLWP::UserAgentを使う必要は無いかと思います。
LWP::Simpleを使って以下のようにすればうまく行きました。
use LWP::Simple; for(my $i = 1;$i <= 10;$i++){ # とりあえず10ページ取得 my $url = "http://otd1.jbbs.livedoor.jp/18972/bbs_plain?base=$i&range=1"; parse(get($url)); } sub parse{ my ($data) = @_; my $decoder = Encode::Guess->guess($data); my $string = $decoder->decode($data); ...
おおおおお!すごい。本当だ。いけました。大感謝です。
CPANモジュール(というかPerlそのもの)をほとんど初めて使ったんですが、どのモジュールを選ぶかというのも重要なんですね。LWP::UserAgentは内部的にややこしい事をやっているとか、そんな感じなんでしょうか?
あっという間に解決していただいて、びっくり&感嘆しております。ありがとうございます!