-1

私は Perl と一般的にプログラミングの初心者です。私はここでいくつかの本当の問題に直面しています。テキスト ファイルを開き、一連の URL を読み取り、ページのコンテンツを取得し、HTML をクリーニングし、コンテンツを別のファイルに保存できる Perl スクリプトが必要です。

ご指導ありがとうございました。

4

3 に答える 3

1

次の実際の例を参照してください。これを行う簡単な方法は次のとおりです。

読み込むファイル:

$ cat /tmp/list.txt
http://stackoverflow.com/questions/10627644/perl-script-to-open-file-get-url-and-make-html-cleaning
http://google.com

Perl コード、基本的な LWP::UserAgent "browser" を使用します

#!/usr/bin/env perl

use strict;
use warnings;

require LWP::UserAgent;

open FH, "<", "/tmp/list.txt";

my $ua = LWP::UserAgent->new;

$ua->timeout(10);

foreach my $line (<FH>) {
    my $response = $ua->get($line);

    if ($response->is_success) {
        # you need another file handle here to write to a new file
        print $response->decoded_content;
    }
    else {
        die $response->status_line;
    }
}

close FH;

これは良いベースです。すべてのニーズを完了するには、もう少し作業が必要です: - 別のファイルハンドルを使用して新しいファイルを書き込む - HTML をクリーンアップする

編集:「クリー​​ニング」についてはよくわかりません:ページを HTML なしでテキストとしてダンプしますか? はいの場合は、次のことを考慮してください。

#!/usr/bin/env perl

use strict;
use warnings;

while (<>) {
    `links -dump "$_" > "$1" `if m!https?://([^/]+)!;
}

次に、シェルで次のようにスクリプトを呼び出すことができます。

$ perl script.pl < /path/to/URLs.list
于 2012-05-17T00:30:36.957 に答える
0

This is an example of how it could be done, including html cleanup and file saving

#!/usr/bin/perl
use LWP::Simple;
use HTML::Clean;
open FILE, "</path/to/file/urls.txt" or die $!;
while(<FILE>){
    chomp $_;$url=$_;
    my $content=get($url);

    my $h = new HTML::Clean(\$content);
    $h->compat();
    $h->strip();
    my $data = $h->data();

    $url=~s/(http:\/\/)(.+\..+)(\/*)/$2/g;

    open NF, ">>/path/to/file/$url.html";
    binmode(NF, ":utf8");
    print NF $$data;
    close NF;
}
close FILE;

This will save 'http://url.com/something' as 'url.com.html'

于 2012-05-17T00:50:58.240 に答える
0

このようになります

  • openテキストファイルを開くために使用します
  • while (<$fh>) { ... }そこから読み取るために使用します
  • chomp改行を削除する各行
  • LWPモジュールを使用して各 URL を読み取ります
  • HTMLクリーニングを行う
  • openとを使用printしてファイルに書き込みます
于 2012-05-17T00:23:30.203 に答える