使用Perl脚本自动提取保存网页中的数据

时间:2022-06-05 02:57:59

使用Perl脚本自动提取保存网页中的数据

[摘 要]Perl是Unix平台下的一种脚本语言,在其Win 32版本问世之后,Perl在Windows平台的网站编程与管理工作中得到广泛应用。使用Perl的OLE、LWP和Encode模块,可以方便将网页中的数据保存到Excel文件。

[关键词]Perl;Excel;Win 32;LWP模块

doi:10.3969/j.issn.1673 - 0194.2015.20.140

[中图分类号]TP311.52 [文献标识码]A [文章编号]1673-0194(2015)20-0-01

Perl是语法简洁、文本处理功能强大的语言。CPAN(Comprehensive Perl Archive Network)是因特网上最大的Perl模块集散地,包含了现今公布的几乎所有的Perl模块。使用Perl的OLE、LWP和Encode模块包之前,应在本地计算机中安装这三个模块包。以常用的开发环境Strawberry为例说明安装方法:①安装模块,在命令行界面依次输入cpan Win 32::OLE,cpan Win 32::LWP cpan Win 32::OLE,cpan URL::Encode;②添加变量TERM=dump;③添加以下语句到环境变量PATH:c:\myperl\perl\site\bin和c:\myperl\perl\bin。

创建新Excel文档并设置格式

#!D:/Strawberry/perl/bin/perl.exe

use strict;

use Encode;##设置需要使用的包

use utf 8;

use Win 32::OLE;

use Win 32::OLE::Const 'Microsoft Excel';

use LWP::Simple;

use LWP::UserAgent;

my $destin_excelfile='C:\ gzyq.xls'; ##设置目标excel文档

my $destin_book=$Excel->Workbooks->Add();

my $destin_sheet=$destin_book->Worksheets("Sheet1");

$destin_sheet->Activate();

$destin_sheet->{Name}="gzyq";

使用perl自动登录网站

LWP是用于访问Web网站的Perl模块包。使用其中的UserAgent、Cookies、Response等类,可以很方便地模拟浏览器的行为。首先创建一个UserAgent对象my $ua=LWP::UserAgent->new();然后设置Cookies:my $cookie_jar = HTTP::Cookies->new(file => 'cookies.txt',autosave => 1,ignore_discard => 1,),$ua->cookie_jar( $cookie_jar );最后调用UserAgent的POST方法提交用户名和密码:my $url = URI->new('http://202.120.126.80/sbc/passport/login.shtml');my $response = $ua->post($url,['username' => 'user1', 'password' => '123456']);

使用Perl解析网页中的数据并存入Excel文档(见图1)。

Perl利用强大的正则表达式和复杂的模式匹配技巧来快速处理大量文本,因此非常适合网页解析。首先使用Get方法获取图1网页中的内容:

my $res =$ua->get("http://202.120.126.80/device_info_list.shtml? page=1");

my $content = $res->as_string;

Encode::_utf8_on($content);#将网页内容编码格式转为utf8

$content=~ s/\r//g;#删除回车等不可见字符

my @equip_list=$content=~ /<td>(\d+\w*\d+)<\/td>/gsm; #捕获网页中的设备编号

#将编号依次填写在Excel中

foreach(@equip_list){

$destin_sheet->Cells($row_num,1)->{Value}=$_;

$row_num++;

}

#以上程序只解析了一个网页,如果表格在多个页面中,可以用for语句将上述代码循环执行。

图1 网页中待提取的数据列表(截图)

Perl语言融合了许多其他语言的特性,再加上对正则表达式的支持,使得其有极强的文字处理能力,以及良好的跨平台移植性。此外因特网上有众多Perl模块下载,使得用户无需编写大量代码,只需了解这些模块的使用方法便可快速地实现所需要的功能。

主要参考文献

[1]王丽宏,李晓明,方滨兴. Perl语言及其应用[J].哈尔滨工业大学学报,1997(6).

[2]朱铭亮.Perl中使用Win32:OLE模块读写Excel的方法[J].三明学院学报学报,2007(2).

上一篇:关于利用信息化手段管理传统档案的思考 下一篇:论通信基站动力环境监控系统的设计和开发