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