使用perl指令碼抓取網頁總結

2021-05-22 21:29:18 字數 1339 閱讀 3314

使用perl實現網頁抓取,對網路蜘蛛的初步嘗試。

windows xp,iis,perl 5.88,cmd

在cmd中除錯,最後iis中呼叫,解析結果要儲存到資料庫中,資料庫中採用utf8編碼,解析的網頁為gb2312編碼,所以理清編碼特別重要。

關於編碼首先應該弄清楚的概念

指令碼使用ansi編碼,只是資料庫的內容使用decode,結果內容有個別字元亂碼,是html::formattext::withlinks; 將html變成文字可讀樣式時出現問題。可以算是乙個bug

指令碼實用utf8編碼,得到的網頁眉先進行decode,再進行其他的處理,問題解決,但在cmd下除錯的時候,會有「wide character in print」警告資訊,因為環境是gbk,輸出urt8編碼是會報警,使用encode(」euc-cn」, $value),對輸出進行轉義,可以解決這個問題,而網上說的加 use encoding 「utf-8″; 不能解決這個問題。

遺留問題:iis對perl的支援,配置沒有問題,增加了對.pl、.cgi的定義,測試時發現在ie下正常,在firefox下彈出儲存檔案的對話方塊,但是以前的.pl正常。估計於haed的輸出有關係,還有待於進一步的測試。

encode函式是用來編碼perl字串的。它將perl字串中的字元用指定的編碼格式編碼,最終轉化為位元組流的形式,因此和perl處理環境之外的事物打交道經常需要它。

其格式很簡單:

$octets = encode(encoding, $string [, check])

$string:  perl字串

encoding: 是給定的編碼方式

$octets:  是編碼之後的位元組流

check:   表示轉換時如何處理畸變字元(也就是perl認不出來的字元)。一般不需使用

decode函式則是用來解碼位元組流的。它按照你給出的編碼格式解釋給定的位元組流,將其轉化為使用utf8編碼的perl字串,一般來說從終端或者檔案取得的文字資料都應該用decode轉換為perl字串的形式。它的格式為:

$string = decode(encoding, $octets [, check])

$string、encoding、$octets和check的含義同上。

明白如何使用該函式的例子:

use encode;

$dat="測試文字";

$str=decode("gb2312",$dat);

@chars=split //,$str;

foreach $char (@chars)

使用wget抓取網頁

使用wget的mirror選項可以實現整個 的映象抓取。語法是 wget mirror w html extension convert links p path 有點長 事實上,可以通過別名來簡化這個操作,在.bash profile下新增如下語句 alias webdup2 wget mirro...

使用Perl進行網頁資料抓取 初學者簡明版

為什麼選擇perl來做,主要還是perl在文字處理方面有著天然的優勢。做這個事情的大概順序是 1,perl 既然是初學,首先要會用perl,如果會的話,可以跳過這部分。如果不會也沒關係,先安裝一下,在網上搜activeperl的win32安裝包,一路下一步就好了。怎麼執行呢,拿記事本寫個perl程式...

用php抓取網頁內容方法總結

用php抓取頁面的內容在實際的開發當中是非常有用的,如作乙個簡單的內容採集器,提取網頁中的部分內容等等,抓取到的內容在通過正規表示式做一下過濾就得到了你想要的內容,至於如何用正規表示式過濾,在這裡就不做介紹了,有興趣的同學可以參考本站的 正規表示式 板塊 以下就是幾種常用的用php抓取網頁中的內容的...