郭文彬
(上海大学 实验设备处,上海 200444)
使用Perl脚本自动提取保存网页中的数据
郭文彬
(上海大学 实验设备处,上海 200444)
Perl是Unix平台下的一种脚本语言,在其Win 32版本问世之后,Perl在Windows平台的网站编程与管理工作中得到广泛应用。使用Perl的OLE、LWP和Encode模块,可以方便将网页中的数据保存到Excel文件。
Perl;Excel;Win 32;LWP模块
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:myperlperlsitein和c:myperlperlin。
创建新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/ //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).
10.3969/j.issn.1673 - 0194.2015.20.140
TP311.52
A
1673-0194(2015)20-0180-01
2015-08-27