Perl正則表達(dá)式如何提取網(wǎng)頁數(shù)據(jù)

小樊
81
2024-10-09 03:13:26
欄目: 編程語言

在Perl中,你可以使用正則表達(dá)式來提取網(wǎng)頁數(shù)據(jù)。以下是一個(gè)簡單的示例,展示了如何使用Perl的內(nèi)置庫IO::Socket::INET來獲取網(wǎng)頁內(nèi)容,并使用正則表達(dá)式提取所需的數(shù)據(jù):

#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;

# 設(shè)置監(jiān)聽地址和端口
my $server_address = '127.0.0.1';
my $server_port        = '8080';

# 創(chuàng)建套接字
my $socket = IO::Socket::INET->new(
    LocalHost => $server_address,
    LocalPort => '8080',
    Proto     => 'tcp',
    Reuse     => 1,
    Proto     => 'http',
    Reuse     => 1,
) or die "無法創(chuàng)建套接字: $!\n";

# 綁定套接字
$socket->bind($server_address, $server_port);

# 監(jiān)聽連接
$socket->listen(5);
print "服務(wù)器正在監(jiān)聽端口 $server_port...\n";

# 接受來自客戶端的連接
my $client_address = "";
my $client_socket;
$socket->accept($client_socket);

# 獲取請(qǐng)求行數(shù)據(jù)
my $request = "";
$client_socket->recv($request, 1024);
print "接收到請(qǐng)求: $request\n";

# 關(guān)閉套接字
$client_socket->close();
$socket->close();

在這個(gè)示例中,我們創(chuàng)建了一個(gè)簡單的HTTP服務(wù)器,監(jiān)聽端口8080。當(dāng)客戶端連接到服務(wù)器時(shí),服務(wù)器會(huì)接收請(qǐng)求行數(shù)據(jù),然后使用正則表達(dá)式提取所需的數(shù)據(jù)。

要提取網(wǎng)頁數(shù)據(jù),你可以使用Perl的正則表達(dá)式庫MIME::Parse::HTML。首先,你需要安裝這個(gè)庫:

cpan MIME::Parse::HTML

然后,你可以使用以下代碼來提取網(wǎng)頁數(shù)據(jù):

#!/usr/bin/perl
use strict;
use warnings;
use MIME::Parse::HTML;

# 獲取網(wǎng)頁內(nèi)容
my $url = 'http://example.com';
my $html_content = get_html_content($url);

# 使用正則表達(dá)式提取數(shù)據(jù)
my $title = "";
if ($html_content) {
    $title =~ s/<title>(.*?)<\/title>/$1/gi;
    print "網(wǎng)頁標(biāo)題: $title\n";
} else {
    print "無法獲取網(wǎng)頁內(nèi)容\n";
}

sub get_html_content {
    my $url = shift;
    my $content = "";

    # 使用LWP::UserAgent獲取網(wǎng)頁內(nèi)容
    my $ua = LWP::UserAgent->new;
    my $response = $ua->get($url);

    if ($response->is_success) {
        $content = $response->decoded_content;
    } else {
        print "獲取網(wǎng)頁失敗: ", $response->status_line, "\n";
    }

    return $content;
}

在這個(gè)示例中,我們使用MIME::Parse::HTML庫的get_html_content函數(shù)獲取網(wǎng)頁內(nèi)容,然后使用正則表達(dá)式提取標(biāo)題。你可以根據(jù)需要修改正則表達(dá)式來提取其他數(shù)據(jù)。

0