郭文彬
(上海大學(xué) 實(shí)驗(yàn)設(shè)備處,上海 200444)
使用Perl腳本自動提取保存網(wǎng)頁中的數(shù)據(jù)
郭文彬
(上海大學(xué) 實(shí)驗(yàn)設(shè)備處,上海 200444)
Perl是Unix平臺下的一種腳本語言,在其Win 32版本問世之后,Perl在Windows平臺的網(wǎng)站編程與管理工作中得到廣泛應(yīng)用。使用Perl的OLE、LWP和Encode模塊,可以方便將網(wǎng)頁中的數(shù)據(jù)保存到Excel文件。
Perl;Excel;Win 32;LWP模塊
Perl是語法簡潔、文本處理功能強(qiáng)大的語言。CPAN(Comprehensive Perl Archive Network)是因特網(wǎng)上最大的Perl模塊集散地,包含了現(xiàn)今公布的幾乎所有的Perl模塊。使用Perl的OLE、LWP和Encode模塊包之前,應(yīng)在本地計算機(jī)中安裝這三個模塊包。以常用的開發(fā)環(huán)境Strawberry為例說明安裝方法:①安裝模塊,在命令行界面依次輸入cpan Win 32::OLE,cpan Win 32::LWP cpan Win 32::OLE,cpan URL::Encode;②添加變量TERM=dump;③添加以下語句到環(huán)境變量PATH:c:myperlperlsitein和c:myperlperlin。
創(chuàng)建新Excel文檔并設(shè)置格式
#!D:/Strawberry/perl/bin/perl.exe
use strict;
use Encode;##設(shè)置需要使用的包
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'; ##設(shè)置目標(biāo)excel文檔
my $destin_book=$Excel->W(wǎng)orkbooks->Add();
my $destin_sheet=$destin_book->W(wǎng)orksheets("Sheet1");
$destin_sheet->Activate();
$destin_sheet->{Name}="gzyq";
使用perl自動登錄網(wǎng)站
LWP是用于訪問Web網(wǎng)站的Perl模塊包。使用其中的UserAgent、Cookies、Response等類,可以很方便地模擬瀏覽器的行為。首先創(chuàng)建一個UserAgent對象my $ua=LWP::UserAgent->new();然后設(shè)置Cookies:my $cookie_jar = HTTP::Cookies->new(file =>'cookies.txt',autosave => 1,ignore_discard => 1,),$ua->cookie_ jar( $cookie_jar );最后調(diào)用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解析網(wǎng)頁中的數(shù)據(jù)并存入Excel文檔(見圖1)。
Perl利用強(qiáng)大的正則表達(dá)式和復(fù)雜的模式匹配技巧來快速處理大量文本,因此非常適合網(wǎng)頁解析。首先使用Get方法獲取圖1網(wǎng)頁中的內(nèi)容:
my $res =$ua->get("http://202.120.126.80/device_info_list.shtml?page=1");
my $content = $res->as_string;
Encode::_utf8_on($content);#將網(wǎng)頁內(nèi)容編碼格式轉(zhuǎn)為utf8
$content=~ s/ //g;#刪除回車等不可見字符
my @equip_list=$content=~ /<td>(d+w*d+)</td>/gsm; #捕獲網(wǎng)頁中的設(shè)備編號
#將編號依次填寫在Excel中
foreach(@equip_list){
$destin_sheet->Cells($row_num,1)->{Value}=$_;
$row_num++;
}
#以上程序只解析了一個網(wǎng)頁,如果表格在多個頁面中,可以用for語句將上述代碼循環(huán)執(zhí)行。
圖1 網(wǎng)頁中待提取的數(shù)據(jù)列表(截圖)
Perl語言融合了許多其他語言的特性,再加上對正則表達(dá)式的支持,使得其有極強(qiáng)的文字處理能力,以及良好的跨平臺移植性。此外因特網(wǎng)上有眾多Perl模塊下載,使得用戶無需編寫大量代碼,只需了解這些模塊的使用方法便可快速地實(shí)現(xiàn)所需要的功能。
主要參考文獻(xiàn)
[1]王麗宏,李曉明,方濱興. Perl語言及其應(yīng)用[J].哈爾濱工業(yè)大學(xué)學(xué)報,1997(6).
[2]朱銘亮.Perl中使用Win32:OLE模塊讀寫Excel的方法[J].三明學(xué)院學(xué)報學(xué)報,2007(2).
10.3969/j.issn.1673 - 0194.2015.20.140
TP311.52
A
1673-0194(2015)20-0180-01
2015-08-27