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