温馨提示×

Perl正则表达式如何提取网页数据

小樊
86
2024-10-09 03:13:26
栏目: 编程语言

在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函数获取网页内容,然后使用正则表达式提取标题。你可以根据需要修改正则表达式来提取其他数据。

0