【場景描述】采集全國航班信息。
【入口網址】http://www.esk365.com/tools/gnhb/
【采集內容】采集全國航班的航班號,起點、終點。
l 思路分析
配置思路概覽:
l 配置步驟
一.新建采集任務
選擇【采集配置】,點擊任務列表右上方【+】號可新建采集任務,將采集入口地址填寫在【采集地址】框中,【任務名稱】自定義即可,點擊下一步。
二.鏈接抽取
1.列表鏈接需要腳本配置,操作如下圖所示:
2.查看頁面源碼,打開瀏覽器中該頁面,點擊F12,點擊指針按鈕,如下圖所示,用指針按鈕選中所需要的地點鏈接,這時在右側出現對應源碼內容。觀察發現所需要的地點鏈接,在class為【p_l2】的節點后的class為【wq ws】的節點下的class為【fa_wk3】的節點中。
3.根據以上思路,具體配置腳本如下,配置好腳本后點擊右上角【保存】。
文本如下:
while(foorb) { url link;//定義一個url var foorc=foorb.child;//定義foorc為foorb節點的子節點 while(foorc) { u=foorc.href;//定義u為foorc節點的href,即為地點對應的鏈接 link.urlname=URL.StdUrl(URL.urlname,u);//返回鏈接為u link.title = DOM.GetTextAll(foorc);//返回鏈接名稱為foorc中所有的文本內容 link.tmplid = 2;//關聯模板2 foorc=foorc.next;//foorc為foorc的下一個節點 RESULT.AddLink(link); } foorb = foorb.next.next.next;//foorb為foorb的下一個的下一個的下一個節點,即下一個class為【fa_wk3】的節點 }
⑥采集預覽如下所示:
三. 數據抽取
1.鏈接抽取完成進入數據頁,在模板02中,添加數據抽取,具體操作如下所示:
2.此時要完成數據建表的工作:選擇【數據建表】,點擊【采集數據表結構】中的【+】,即可添加數據表,名稱可以自定義,在此命名為房天下表單。
3.數據表配置完成,選擇【數據抽取】右側數據屬性配置,表單選擇剛建立的數據表,則可看到表單中的字段在左側顯示。
4.點擊腳本窗口,選擇數據抽取腳本
5.觀察所需字段在頁面中的位置,瀏覽器打開任意一個地點分類的詳情頁,點擊F12,點擊指針按鈕,如下圖所示,用指針按鈕選中所需要的字段信息,這時在右側出現對應源碼內容。
觀察可發現,所需的航班數據就在class為【p_l2】后的class為【wq lq】的字節下的所有class為【li】的字節中。
6.根據上述結構,數據抽取腳本如下所示:
腳本文本如下:
var foor = DOM.FindClass("p_l2","div");//定義foor為class為【p_l2】的字節 var foora = foor.child.next;//定義foora為class為foor字節的子字節的下一個字節,即class為【wq lq】的字節 while(foora) { var foorb =DOM.FindName("li",foora);//定義foorb為foora后idname為【li】的字節 while(foorb) { var li= DOM.GetTextAll(foorb);//定義li為foorb字節下所有的文本內容,即MU9040(阿爾山-北京) record re; re.num = li.Left("(");//返回num值為li“(”左邊的值,即MU9040 re.From_ = li.Middle("(","-");//返回From_值為li","和-"中間的值,即阿爾山 re.to_ = li.Middle("-",")");//返回to_值為li"-"和,"中間的值,即北京 RESULT.AddRec(re,this.schemaid); foorb=foorb.next;//foorb為foorb下一個節點 } foora=foora.next.next.next;//foora為foora的下一個的下一個的下一個節點 }
7.以上完成全部字段配置,效果預覽如下:
四.采集數據
模板配置完成,采集預覽沒有問題后,可以進行數據采集。
1.新建采集數據表:
選擇【數據建表】,點擊【表單列表】中該模板的表單,在【關聯數據表】中選擇【創建】,表名稱自定義,這里命名為hangban(注意命名不能用數字和特殊符號),點擊【確定】。
2.選擇【數據采集】,勾選任務名稱,點擊【開始采集】,則正式開始采集。
3.可以在【數據瀏覽】中,選擇數據表查看采集數據,并可以導出數據。
l 課后回顧
FindClass(class名,標簽類型,開始查找結點):當符合條件的class名稱唯一時,使用class名來查找結點。
FindName(標簽名,開始查找結點):當查找范圍內,符合條件的數據標簽唯一時,可以使用標簽名稱查找標簽結點。
GetTextAll(需要獲取文本的結點,使用的字符編碼):獲取該html標簽節點及所有子節點的可見文本。
Child:孩子頻道節點。
Next:下一頻道節點。
FindId(idVal):通過標簽的ID屬性值查找標簽節點,其中idVal表示待查找標簽ID屬性值。
Left(分界字符):獲得該字符串分解字符左側所有內內容。