【場景描述】采集當當網計算機類中的圖書信息。
【源網站介紹】當當(www.dangdang.com)是全球知名的綜合性網上購物商城,由國內著名出版機構科文公司、美國老虎基金、美國IDG集團、盧森堡劍橋集團、亞洲創業投資基金(原名軟銀中國創業基金)共同投資成立,于美國時間2010年12月8日在紐約證券交易所正式掛牌上市,成為中國第一家完全基于線上業務、在美國上市的B2C網上商城。
【使用工具】前嗅ForeSpider數據采集系統,點擊下方鏈接可免費下載
http://www.bendalayoga.com/view/forespider/view/download.html
【入口網址】
http://category.dangdang.com/cp01.54.00.00.00.00.html
【采集內容】
采集當當網中的計算機類中的圖書信息,包括所屬一級分類、二級分類、書名、簡介、作者、出版社、出版時間、價格、編輯推薦、內容簡介、作者簡介、目錄、頁面網址等。
【采集效果】如下圖所示:
l 思路分析
配置思路概覽:
l 配置步驟
1. 新建采集任務
選擇【采集配置】,點擊任務列表右上方【+】號可新建采集任務,將采集入口地址填寫在【采集地址】框中,【任務名稱】自定義即可,點擊下一步。
選擇列表鏈接,點擊完成按鈕,即創建任務完成。
2.獲取分類鏈接
①采集預覽,查看頁面所有鏈接,查找計算機分類鏈接的規律,發現所有與計算機相關的分類的鏈接規律為:http://category.dangdang.com/cp01.54.+數字串+.00.00.00.html
②所以使用地址過濾的方法,過濾鏈接為以下規律的鏈接:http://category.dangdang.com/cp01.54.\d.00.00.00.html
其中\d表示數字串,點擊保存,重新測試,計算機分類鏈接就篩選出來了。
3. 抽取圖書商品鏈接
①新建一層模板02,并新建兩個鏈接抽取,第一個鏈接抽取抽取商品頁鏈接,第二個抽取翻頁鏈接。
可分別修改名稱為:列表鏈接抽取和翻頁鏈接抽取。
②選擇任意一條分類鏈接,并粘貼到模板02的示例地址處,點擊右上角保存按鈕。
③雙擊內置瀏覽器空白處,內置瀏覽器顯示該頁面。
④采集預覽,雙擊任意一條分類鏈接,進入圖書商品列表頁,查看頁面鏈接,觀察圖書鏈接規律,發現圖書商品鏈接規律為:
http://product.dangdang.com/+數字串+.html
⑤設置地址過濾,過濾規律為http://product.dangdang.com/\d.html\e的鏈接,其中\d表示數字串,\e表示鏈接結束。采集預覽,圖書商品鏈接已抽取到。
4.抽取翻頁鏈接
采集預覽,雙擊任意一條分類鏈接進入分類頁,觀察翻頁鏈接,發現翻頁鏈接中都含有:http://category.dangdang.com/pg,使用地址過濾方法,過濾地址中含有:http://category.dangdang.com/pg的鏈接。采集預覽如下圖所示:
5.抽取圖書商品數據
①新建一個抽取模板,在其下新建一個數據抽取,具體操作如下所示:
②數據建表,按照下圖所示建數據表。(注意字段屬性等應嚴格按照下圖進行設置)
③將新建好的數據表,關聯到模板中去,如下圖所示:
④填寫示例數據,采集預覽,復制任意一條圖書商品鏈接。
將鏈接粘貼到本模板示例地址中,并雙擊內置瀏覽器空白部分,加載本鏈接。
⑤關聯模板
模板02中的列表鏈接抽取,關聯模板03,這樣采集到的圖書商品鏈接會到模板03進行數據抽取。
模板02中的翻頁鏈接抽取,關聯模板02,這樣采集到的翻頁鏈接會繼續在模板02中進行列表鏈接抽取。
⑥數據抽取-可視化抽取部分字段
Class1&class2使用字段定位取值的方法,進行取值,具體操作如下所示:
Title取值同上
Introduct、Autho、publish、pubtime、price取值同上
⑦數據抽取—腳本抽取部分字段
Recommend后邊的字段對應的數據不在頁面源碼中,所以用定位取值取不到。
接下來我們用瀏覽器打開該示例地址,查看recommend等字段對應的數據在哪個請求中。
點擊F12,查看每個請求中返回的內容,發現recommend等內容在下圖所示請求中。
發現該請求的鏈接是:
http://product.dangdang.com/index.php?r=callback%2Fdetail&productId=29267036&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.06.23.00.00
觀察發現其規律為:
http://product.dangdang.com/index.php?r=callback%2Fdetail&productId=+id+&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.20.00.00.00";
查看請求中的返回內容,發現文本內容都被Unicode轉譯。
使用在線轉碼工具能夠轉譯為中文。
在源碼中,發現id為【abstract-all】的內容是編輯推薦(recommend字段)。
同理,id為【content-all】的內容是內容簡介(content字段);
id為【catalog-show-al】的內容是目錄內容(booklist字段);
故在recommend字段創建腳本教程如下所示:
腳本文本如下所示:
var id=URL.urlname.Middle(".com\/",".html"); //從網址中拿到商品ID var ur = "http://product.dangdang.com/index.php?r=callback%2Fdetail&productId="+id+"&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.20.00.00.00"; var doc = EXTRACT.OpenDoc(CHANN,ur); //通過第2行拼出的請求地址,打開請求(必須與CloseDoc成對使用) var str = doc.GetDom().GetSource().ToStr(); //取請求正文->取正文源碼->轉換成字符串類型 jScript js; //定義一個js變量,用于存儲json文件 var json=js.RunJson(DOM.UnEscape(str,1)); //將已轉換成字符串的請求正文,轉換成json格式,并用UnEsCape()方法轉碼(從Unicode編碼轉化成GBK) var html = OpenDom(json.data.html,ur, false); //將json中包含著的HTML部分取出來,并轉變為DOM樹結構(必須與CloseDom成對使用) var recommend=html.GetTextAll(html.FindId("abstract-all").next); //從DOM樹中找到該字段的節點,將內容取出來 REC.content = html.GetTextAll(html.FindId("content-all").next); //由于當前打開的請求正文中,也包含了其他字段,為了節約效率,定義一個當前記錄集對象,將其他字段一并取出 REC.author_info = html.GetTextAll(html.FindId("authorIntroduction-all").next); //同上 REC.booklist = html.GetTextAll(html.FindId("catalog-show-all").next); //同上 CloseDom(html); //關閉一個由OpenDom打開的dom樹 EXTRACT.CloseDoc(doc); //關閉打開的采集文檔 return recommend;
⑦采集預覽,雙擊進入下一層,知道打開數據頁,抽取到數據,表示配置成功。
l 采集步驟
模板配置完成,采集預覽沒有問題后,可以進行數據采集。
①首先要建立采集數據表:
選擇【數據建表】,點擊【表單列表】中該模板的表單,在【關聯數據表】中選擇【創建】,表名稱自定義,這里命名為【dangdang】(注意命名不能用數字和特殊符號),點擊【確定】。創建完成,勾選數據表,并點擊右上角保存按鈕。
②選擇【數據采集】,勾選任務名稱,點擊【開始采集】,則正式開始采集。
③采集結束后,可以在【數據瀏覽】中,選擇數據表查看采集數據,并可以導出數據。
④導出的文件打開如下圖所示:
溫馨提示:采集過程中可能會遇到封ip的情況,如果您配置好后沒有采集到數據,可購買適量代理ip進行采集。