【資料來源:http://www.ithome.com.tw/itadm/article.php?c=46312

作者:蔡學鏞-專職作家
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。

爬蟲類程式能為你做什麼?你可以利用它取得股票資訊;設計搜尋引擎;進行幾個購物網站的比價。Bot也可以幫助你提升文章點擊率,進入熱門排行榜。

 
前一陣子,我很熱衷於從網路上「蒐集資料」。我說的可不是自己得捲起袖子,親自動手的蒐集,畢竟那麼多機械化的動作,誰受得了?機械化的動作,當然有請機器人程式幫忙了。

我寫了一個程式,模擬滑鼠和鍵盤的動作,將滑鼠移動到網頁上超連結的位置,然後點擊,休息數秒等待網頁下載完畢,接著讓滑鼠選取選單上的「另存新檔」,模擬按鍵輸入的動作,輸入新的檔名,然後按下存檔。

實際上,這個程式瑕疵相當多,於是我把這個程式扔了,寫了一個真正的Web Robot程式,這個程式可以連結到網址,下載網頁,對網頁內容進行字串處理,找出下一個連結,再連結到下一個網址。

Web Robot是指「不需要使用者介入,會自動進行一連串網路交易」的程式。這種「會根據所下載網頁內容,而連結到不同超連結」的Web Robot,也稱為Crawler(爬蟲類)、Spider(蜘蛛)或Bot(機器人)。因為Web就像是一張蜘蛛網,蜘蛛可以在網中攀爬,所以大家似乎最喜歡稱呼這類程式為Spider。

在開發蜘蛛的過程,我用過兩種語言。我先使用Java,後來改用REBOL。但是這兩種語言都不是蜘蛛的主流語言,許多蜘蛛似乎都是使用Perl或Python開發出來的。想寫出你自己專屬的蜘蛛程式,你必須慎選語言並確定該語言必須能夠輕易地:(1)從「網路下載資料」,並儲存。(2)「解析網頁內容」,進行字串處理,否則無法找出後續的連結。

在「網路下載資料」的部分,由於HTTP是很簡單的協定,所以即使你的語言只支援TCP/IP,不支援HTTP,你也一樣可以寫出蜘蛛程式,只是稍微麻煩了點。另外,該語言工具是否能夠很容易地使用Web Services,也應該列入考慮。有些網站有開放Web Services服務,直接使用他們的服務,可以省下不少下載與文字處理的工夫。有些資訊甚至只能透過Web Services的服務取得。

在「解析網頁內容」的部分,該語言必須找出有用的資訊和超連結:把資訊記錄下來,並在之後下載超連結的內容。現今Ajax大行其道,目前大量的網站都使用JavaScript,造成「解析網頁內容」的困擾。關於這一點,目前的解決方法有:利用外部的JavaScript引擎(例如Rhino);利用RIA(例如:Adobe AIR)的JavaScript引擎;利用COM呼叫微軟IE元件;或是透過AppleScript控制Safari瀏覽器。

由於蜘蛛程式相當耗費CPU和記憶體,所以常常會用到許多臺電腦,一同進行某項任務,但是會事先切割好責任區域。另外,蜘蛛程式也相當耗費硬碟,為此,我特別買了一臺大硬碟,存放蜘蛛程式搬回家的獵物。手上有這麼多獵物固然欣喜,但要如何將這些獵物烹煮成美味的佳餚,才是另一個真正的難題。

另外,撰寫蜘蛛程式時,必須小心「鬼打牆」的現象──走進之前造訪過的區域。所以必須記錄下走訪過的URL,進行比對,確定該URL是新鮮的,才進行連結。通常蜘蛛程式在執行過程中,URL的數目很快就會變得相當大,而每個URL的字串又相當長,因而造成記憶體儲存和比對時,嚴重的效率問題。

有些網站不歡迎Bot,會在網站根目錄下放置一個文字檔robots.txt,裡面說明哪些資源允許Bot取用,哪些URL則禁止Bot涉足。然而,在上了鎖都不見得安全的網路世界,只想憑一紙聲明就將盜賊阻隔於外,無異是天真的想法。

如果網站(例如網路投票區)想確保連結上該網頁的是個活人,不是Bot,現在最流行的作法是在網頁上顯示「扭曲字母與數字」的圖片(甚至有專為盲人設計的語音版本),或列出簡單的算術題目,讓使用者輸入系統要求的資訊,以確定該網頁的活動有活人的參與。

有些網管人員甚至會布置「魔障」,利用虛擬伺服器,不斷地製造出完全不存在的連結和網頁內容。把你的蜘蛛困在其中,瞎忙一場。一旦遇到「魔障」,不夠聰明的蜘蛛通常會很難脫身。

話說回來,爬蟲類程式能為你做什麼?你可以利用它取得股票資訊;設計搜尋引擎;進行幾個購物網站的比價。Bot也可以幫助你提升文章點擊率,進入熱門排行榜。

學生利用Bot連接選課系統;有人利用Bot連接拍賣網站,不過這都可能會有法律的問題,如果你的Bot發出連接的要求太頻繁,造成DoS(Denial of Service,服務阻斷),更是可能因此吃上官司。

雖然使用Bot很多時候其實是遊走在法律邊緣,但是Bot實在是太方便,太好用了。每次當我的電腦上跑著我自製的蜘蛛程式,整個晚上在幫我蒐集資料時,我帶著一絲犯罪的快感和不勞而獲的喜悅,就會睡得特別香甜,特別安穩。

蔡學鏞-專職作家
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。
創作者介紹

右腦 想去環遊世界

yoonow 發表在 痞客邦 PIXNET 留言(0) 人氣()