my favorite

2008/04/08

網路豬豬人 (Web Crawler, Spider)

直接把wiki上對於web crawler(之後都寫為spider)的定義大致抓下來
這邊所謂的spider,其實就是自動擷取網頁上的資料的過程,像是豬豬一樣(抱歉,我實在很懶得用無蝦米打蜘蛛 XD),在網路(web)上將資料一點一點地"扒"回來。

伺機而動的豬豬

spider的功用看了wiki才發現比我想像得多,不僅可以更新網頁資訊,還可以驗證網頁的連結是否失效,自動檢查HTML是否valid等等。目前要做的功能不多,大概就是自動扒完網頁再做parse而已。每次都是先在code project上找一些相關的資料,才發現自己連使用的能力都不具備。因此這次還是老老實實地把wiki的介紹看了一遍,瞭解一下spider的運作機制比較好瞭解。

由於現在網路的資料量實在是爆炸得多,wiki上就點出現在最明顯的三個問題,分別就是網路資料量相當龐大,資料更新快速、還有動態產生的(靜態)網頁,所以在扒的過程中,必須遵守Crawling policy:
  • selection policy : 要扒哪一頁
  • re-visit policy : 什麼時候再來扒這一頁
  • politeness policy : 避免過度擷取網站資料 (就是看根目錄下的robot.txt)
  • parallelization policy : 與其它spider平行合作
經過了兩三天,發現我的spider其實四點都沒有作到
而且演算法極其簡單,就是下載頁面(Get or POST),解析頁面(RegEx),最後再存入資料庫
以下就是通用的POST方法 (其實是怕自己忘記作的小抄 :P)



string url = @"http://www.ticket.com.tw/search.asp";
NameValueCollection postArguments = new NameValueCollection();
postArguments.Add("A", "VALUE_A");
postArguments.Add("B", "VALUE_B");
postArguments.Add("C", "VALUE_C");
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.GetEncoding("big5"); // or Encoding.UTF8
byte[] bytes = webClient.UploadValues(url, postArguments);
string result = Encoding.GetEncoding("big5").GetString(bytes);

No comments:

BIO

Taipei, GuTing, Taiwan

huang47 | personal

huang47 | personal