郭文彬
(上海大學 實驗設備處,上海 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模塊包之前,應在本地計算機中安裝這三個模塊包。以常用的開發(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文檔并設置格式
#!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等類,可以很方便地模擬瀏覽器的行為。首先創(chuàng)建一個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語句將上述代碼循環(huán)執(zhí)行。
圖1 網頁中待提取的數據列表(截圖)
Perl語言融合了許多其他語言的特性,再加上對正則表達式的支持,使得其有極強的文字處理能力,以及良好的跨平臺移植性。此外因特網上有眾多Perl模塊下載,使得用戶無需編寫大量代碼,只需了解這些模塊的使用方法便可快速地實現所需要的功能。
主要參考文獻
[1]王麗宏,李曉明,方濱興. Perl語言及其應用[J].哈爾濱工業(yè)大學學報,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