私はWWW::Mechanize
とHTML::TokeParser
を使用して、更新のためにウェブサイトを解析しています。私はログインが必要なので、ウェブサイトの詳細を与えることはできません。ウェブサイトには基本的にデータテーブルがあります。私はテーブルの最初の行に着くまでhtmlを解析しています。メールを送信しない場合は、最後のスクレイプの値を確認してください。これは、実際の更新が行われたときに擦り傷が私の最後の擦り傷で止まらないことを除いて、私が既存のテーブルエントリでそれをテストするとき、完全にうまく動作します。テーブルが使い果たされてこれが無期限に繰り返されるまで、メールを送信し続けます。私は何が起こっているのか理解できません。私は誰もがウェブサイトなしで確認することはできませんが、私はとにかく自分のコードを投稿している知っている。私は間違っているかもしれないことについてのアイデアを感謝します。Perl:ウェブサイトのスクレイピングで予期しない動作が発生する
コード:私はHTML::TableExtractを使用することを好むタスクのこの種の
sub func{
my ($comid, $mechlink) = @_;
my $mechanize = WWW::Mechanize->new(
noproxy => 0,
stack_depth => 5,
autocheck => 1
);
$mechanize->proxy(https => undef);
eval{
my $me = $mechanize->get($mechlink);
$me->is_success or die $me->status_line;
};
return $comid if ([email protected]);
my $stream = HTML::TokeParser->new(\$mechanize->{content}) or die $!;
while ($tag = $stream->get_tag('td')) {
if($tag->[1]{class} eq 'dateStamp') {
$dt = $stream->get_trimmed_text('/td');
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$name = $stream->get_trimmed_text('/td') if($tag->[1]{class} eq 'Name');
return $comid unless($tag->[1]{class} eq 'Name');
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$info = $stream->get_trimmed_text('/td');
print "$name?\n";
return $retval if($info eq $comid);
print "You've Got Mail! $info $comid\n";
$tcount++;
$retval = $info if($tcount == 1);
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$tag = $stream->get_tag;
$link = "http://www.abc.com".$tag->[1]{href} if ($tag->[0] eq 'a');
my $outlook = new Mail::Outlook();
my $message = $outlook->create();
$message->To('[email protected]');
$message->Cc('[email protected];[email protected]');
my $hd = "$name - $info";
$message->Subject($hd);
$message->Body(" ");
$message->Attach($link);
$message->send;
}
}
}
はあなたのwhileループのコードを含めることができます。
あなたのような何かをしたいことがあります。これは事態が悪くなる可能性が高いです。 – Mike
ログから詳細を確認できるように、アプリケーションログを追加することをお勧めします。さらに、メール送信カウンタと制御された停止も良いです。私はそのようなプログラムから数百回の電子メールを送ってきました。そして、私はそれがいかに迷惑になるかを知っています。 – weismat
ループにコードを追加しました。メール送信カウンタの問題点は、まず、スクラップからスクラップまでどれだけの更新が予想されるかわかりません。第二に、私は制限を入れても、私は同じスクリプトを60秒ごとに実行するので、次の繰り返しは再びメールを送信し始めます – Aks