在Perl中,你可以使用正則表達式來提取網頁數據。以下是一個簡單的示例,展示了如何使用Perl的內置庫IO::Socket::INET來獲取網頁內容,并使用正則表達式提取所需的數據:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket::INET;
# 設置監聽地址和端口
my $server_address = '127.0.0.1';
my $server_port = '8080';
# 創建套接字
my $socket = IO::Socket::INET->new(
LocalHost => $server_address,
LocalPort => '8080',
Proto => 'tcp',
Reuse => 1,
Proto => 'http',
Reuse => 1,
) or die "無法創建套接字: $!\n";
# 綁定套接字
$socket->bind($server_address, $server_port);
# 監聽連接
$socket->listen(5);
print "服務器正在監聽端口 $server_port...\n";
# 接受來自客戶端的連接
my $client_address = "";
my $client_socket;
$socket->accept($client_socket);
# 獲取請求行數據
my $request = "";
$client_socket->recv($request, 1024);
print "接收到請求: $request\n";
# 關閉套接字
$client_socket->close();
$socket->close();
在這個示例中,我們創建了一個簡單的HTTP服務器,監聽端口8080。當客戶端連接到服務器時,服務器會接收請求行數據,然后使用正則表達式提取所需的數據。
要提取網頁數據,你可以使用Perl的正則表達式庫MIME::Parse::HTML。首先,你需要安裝這個庫:
cpan MIME::Parse::HTML
然后,你可以使用以下代碼來提取網頁數據:
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Parse::HTML;
# 獲取網頁內容
my $url = 'http://example.com';
my $html_content = get_html_content($url);
# 使用正則表達式提取數據
my $title = "";
if ($html_content) {
$title =~ s/<title>(.*?)<\/title>/$1/gi;
print "網頁標題: $title\n";
} else {
print "無法獲取網頁內容\n";
}
sub get_html_content {
my $url = shift;
my $content = "";
# 使用LWP::UserAgent獲取網頁內容
my $ua = LWP::UserAgent->new;
my $response = $ua->get($url);
if ($response->is_success) {
$content = $response->decoded_content;
} else {
print "獲取網頁失敗: ", $response->status_line, "\n";
}
return $content;
}
在這個示例中,我們使用MIME::Parse::HTML庫的get_html_content
函數獲取網頁內容,然后使用正則表達式提取標題。你可以根據需要修改正則表達式來提取其他數據。