Perl是一种功能强大且广泛使用的编程语言,特别适合用于编写爬虫程序。在本篇博客中,我将向你展示如何使用Perl来编写一个简单的爬虫程序。
爬取网页
首先,我们需要安装LWP::UserAgent
模块,它是Perl中用于发送HTTP请求的一个常用模块。你可以使用以下命令来安装它:
$ cpan install LWP::UserAgent
接下来,我们可以编写一个Perl脚本来实现爬取网页的功能。
use strict;
use warnings;
use LWP::UserAgent;
# 创建一个新的UserAgent对象
my $ua = LWP::UserAgent->new;
# 设定UserAgent标识
$ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
# 发送GET请求
my $response = $ua->get('https://example.com');
# 检查响应是否成功
if ($response->is_success) {
my $content = $response->decoded_content;
# 在这里处理爬取到的网页内容
print $content;
}
else {
die $response->status_line;
}
以上代码首先创建了一个新的UserAgent对象,并设定了UserAgent标识,模拟浏览器发送请求。然后使用get
方法发送GET请求,并将响应存储在$response
变量中。最后,我们检查响应是否成功,并可以在成功时处理爬取到的网页内容。
解析网页
通常,在爬取网页后,我们需要从网页的HTML内容中提取有用的信息。为了实现这一点,我们可以使用HTML::Parser
模块,它是Perl中用于解析HTML文档的一个常用模块。
你可以使用以下命令来安装HTML::Parser
模块:
$ cpan install HTML::Parser
接下来,我们可以稍微修改上面的脚本来解析网页。
use strict;
use warnings;
use LWP::UserAgent;
use HTML::Parser;
# 创建一个新的UserAgent对象
my $ua = LWP::UserAgent->new;
# 设定UserAgent标识
$ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
# 发送GET请求
my $response = $ua->get('https://example.com');
# 检查响应是否成功
if ($response->is_success) {
my $content = $response->decoded_content;
my $parser = HTML::Parser->new(
start_h => [\&start_handler, "tagname"],
text_h => [\&text_handler, "dtext"],
);
# 在这里处理爬取到的网页内容
$parser->parse($content);
}
else {
die $response->status_line;
}
sub start_handler {
my ($tagname) = @_;
# 在这里处理开始标签
}
sub text_handler {
my ($text) = @_;
# 在这里处理文本内容
}
以上代码新增了一个HTML::Parser
对象,并为其指定开始标签和文本内容的处理函数。我们可以在这两个函数中添加自己的解析逻辑。
存储数据
爬取的数据通常需要存储起来以供后续分析或展示。在Perl中,可以使用DBI
模块来连接数据库并保存数据。
你可以使用以下命令来安装DBI
模块:
$ cpan install DBI
以下是一个示例代码,展示了如何使用DBI
模块连接数据库并将数据保存到数据库中。
use strict;
use warnings;
use LWP::UserAgent;
use HTML::Parser;
use DBI;
# 创建一个新的UserAgent对象
my $ua = LWP::UserAgent->new;
# 设定UserAgent标识
$ua->agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
# 发送GET请求
my $response = $ua->get('https://example.com');
# 检查响应是否成功
if ($response->is_success) {
my $content = $response->decoded_content;
my $parser = HTML::Parser->new(
start_h => [\&start_handler, "tagname"],
text_h => [\&text_handler, "dtext"],
);
# 在这里处理爬取到的网页内容
$parser->parse($content);
}
else {
die $response->status_line;
}
sub start_handler {
my ($tagname) = @_;
# 在这里处理开始标签
}
sub text_handler {
my ($text) = @_;
# 在这里处理文本内容
# 连接到数据库
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost", "username", "password") or die $DBI::errstr;
# 准备SQL语句并执行
my $sth = $dbh->prepare("INSERT INTO table_name (column1, column2) VALUES (?, ?)");
$sth->execute($text, "example");
# 断开数据库连接
$dbh->disconnect;
}
在以上代码中,我们使用DBI
模块连接到数据库,然后准备SQL语句并执行。你需要根据自己的数据库配置进行相应的修改。
结论
使用Perl编写一个简单的爬虫程序并不复杂,你可以通过安装相应的模块来实现网页的爬取、解析和数据存储。在实际开发中,可能还需要处理一些异常情况和加入更多的具体业务逻辑。希望本篇博客能够帮助你入门Perl爬虫编程。
本文来自极简博客,作者:风吹麦浪,转载请注明原文链接:使用Perl编写一个简单的爬虫程序