使用火蜘蛛采集器Firespider采集天貓商品數據並上傳到微店


 

有很多朋友都需要把天貓的商品遷移到微店上去。可在天貓上的商品數據非常復雜,淘寶開放接口禁止向外提供數據,一般的采集器對ajax數據采集的支持又不太好。

 

還有現在有了火蜘蛛采集器,經過一定的配置,終於把天貓商品的數據都采集下來了(SKU信息,運費信息,庫存信息,圖片,商品描述等)。天貓商品網頁的確是很復雜,比如商品描述,還有商品描述中的圖片,使用的都是懶加載,只有當用戶滾動到那里了,才會去加載描述和圖片。還好這些都難不倒火蜘蛛采集器。當然了,采集回來的信息也是很復雜的,需要我們清楚了解淘寶的商品數據結構,並轉換成微店的商品數據結構,然后調用微店接口進行添加。

 

火蜘蛛采集器下載地址:

http://firespider.duapp.com/FireSpiderWeb/index.html

如何在安裝包里就已經說明了。不過現在安裝包只支持win7系統。如果是win8,安裝客戶端時要把安裝包下的components目錄手工復制覆蓋C:\Program Files (x86)\Mozilla Firefox\browser\components。

 

 

下面說說采集的過程

 

  1. 網頁分析

要采集網頁的數據,首先要做的當然是對目標網頁進行分析,目標是找出我們要采集的數據到底在哪里。這可以說是采集過程中最重要的一步。這里我們使用firebug進行分析。使用火狐瀏覽器打開一個天貓商品,比如:

http://detail.tmall.com/item.htm?spm=a1z10.1002.w4948-8875692881.4.4bX5Dj&id=40660880252

 

使用firebug分析網頁結構,主要是通過幾個方面進行了解:頁面源代碼,處理完成后的HTML,腳本,網絡加載。

 

頁面源代碼:在網頁右擊,選擇查看網頁源代碼可以看到。通過查看網頁源代碼,可以大致推測到網頁使用什么樣的方式加載顯示,以及了解部分網頁的加載邏輯。

處理完成后的HTML:通過firebug的“html”tab頁可查看到完整的處理完成后的HTML樹。通過查看處理完成后的HTML,與頁面源代碼進行對比,也可以推測網頁的加載方式。

腳本:通過firebug的”script”tab頁可查看到當前網頁加載了哪些腳本。

網絡加載:通過firebug的”net”tab頁可查看到打開當前網頁后一共加載了多少網絡請求,以及各個網絡請求的返回內容。

 

通過對天貓商品頁的分析,我們發現:

1)  商品圖像,通過HTML就可以取到

2)  商品SKU信息,如尺碼和顏色,通過HTML也能取到

3)  產品參數,通過HTML也可以取到

4)  商品的一部分信息,如SKU價格等,頁面源代碼的一個script中,可以取到這個script的text再進行截取,得到一個json字符串

5)  商品的運費信息,在

http://mdskip.taobao.com/core/initItemDetail.htm?。。。鏈接返回的數據中,通過截取,得到一個json字符串

6)  商品的描述信息,通過HTML也可以取到。但是必須要慢慢滾動下去,觸發懶加載后,待圖片加載完成,才能取到。

 

  1. 定制采集任務

知道了我們要采集數據在哪里之后,我們就可以開始定制采集了:定義執行器,提取器,采集模塊,采集任務等。鑒於一些網頁的復雜性(例如淘寶),有時我們會需要反復進行嘗試,直到找到合適的方法為止。下面介紹一下我們定制的天貓采集任務:

 

2.1   商品頁采集模塊

 

這里定義了四個處理器鏈:

第一個鏈:在網頁加載完成后,依次執行“加入JQ支持”,“采集天貓商品圖像”,“采集天貓SKU”,“天貓產品參數”,“采集天貓產品主信息”。

第二個鏈:在某個網絡鏈接加載完成后,執行“采集天貓產品主信息2”。

第三個鏈:在某個網絡鏈接加載完成后,執行“采集天貓產品描述”。

第四個鏈:在網頁加載完成后,執行“scrollTo”。

 

下面我們對這些處理器逐個進行介紹:

 

加入JQ支持

 

加入JQ支持本來應該定義為執行器,這里把它定義為提取器。不過這也無妨,執行器跟JS提取器本質上是一樣的,只是有無參數有無返回值的區別而已。加入JQ支持的目的只是為了在后面的處理器中寫JS腳本方便一些,可以直接使用JQ腳本。當然,天貓商品頁面本來就已經使用了$這個函數名,所以不要忘記了調用一下jQuery.noConflict();

此處理器的實現,就只是把jquery.mini.js源碼考到function里面了,再調用一下jQuery.noConflict();

 

 

function(){

//把jquery.mini.js源碼考到這里

//…

//把$還給原始頁面

jQuery.noConflict();

}

 

采集天貓商品圖像

 

商品圖像都在頁面上的J_UIThumb這個UL下面,我們通過jquery取到它。注意,這里取到的圖像鏈接是小圖的圖像鏈接。對小圖鏈接經過截取得到大圖鏈接。

小圖鏈接:http://gi1.md.alicdn.com/bao/uploaded/i1/TB128CJGpXXXXa0XXXXXXXXXXXX_!!0-item_pic.jpg_60x60q90.jpg

大圖鏈接:http://gi1.md.alicdn.com/bao/uploaded/i1/TB128CJGpXXXXa0XXXXXXXXXXXX_!!0-item_pic.jpg

 

還有一點要注意,就是要對這個提取器配置添加“鏈接下載過濾器”,這樣采集器會把這些圖像都保存到本地,方便后續處理。

 

 

腳本:

function(){

    var img = [];

   

    jQuery('#J_UlThumb').find('img').each(function(){       

        var s = jQuery(this).attr('src');

       

        // 對小圖鏈接進行截取得到大圖鏈接

        var postfix = s.substring(s.lastIndexOf('.'));

        s = s.substring(0, s.lastIndexOf('.'));

        s = s.substring(0, s.lastIndexOf('.'));

        s = s + postfix;

        img.push(s);

    });

   

    return {

        mainImgs:{

            type:'list',

            value:img,

            useFor:'save',

            tag:''

        }

    }

}

 

 

采集天貓SKU,天貓產品參數

 

這兩個不用多說,只是從HTML中取出SKU信息。跟平時我們用JQ操作DOM是一樣一樣的。

 

 

采集天貓產品主信息

 

天貓商品主信息都放在一個script標簽中,取得這個script的內容,並進行截取,就可以得到天貓商品主信息。

 

function(){

    //取得script標簽中的內容

var str = document.getElementById('J_FrmBid').nextSibling.nextSibling.innerHTML;

 

//對內容進行截取

    str = str.substring(str.indexOf('TShop.Setup(') + 12);

    str = str.substring(0, str.lastIndexOf(');'));

str = str.substring(0, str.lastIndexOf(');'));

 

//解析成json

    var result = JSON.parse(str);

 

    return {

                   mainInfo:{

                            type:'data',

                            value:result,

                            useFor:'save',

                            tag:''

        }

    };

}

 

 

 

采集天貓產品主信息2

 

通過網頁分析我們知道天貓商品的一部分信息是通 http://mdskip.taobao.com/core/initItemDetail.htm 這個鏈接進行加載的,所以我們定義了一個提取器,提取時機為網絡加載之后,用於采集這部分的內容。

注意“提取腳本”中的resp參數,“網絡連接加載之后”的處理器處理腳本都會接收這個參數,可通過resp.responseText取得網絡加載的內容。

 

 

 

采集天貓產品描述,scrollTo

 

這兩個處理器是組合使用的。在網頁分析時我們知道產品描述是懶加載的。如果在網頁加載完成后就通過$(‘#description’).html()來提取產品描述,只能提取到“描述加載中”幾個字。我們要模擬用戶慢慢拖動滾動條滾動網頁,scrollTo處理器就是用於模擬這個過程,以觸發產品描述的懶加載。

 

 

//scrollTo的執行腳本

function(){

    //定義一個全局變量,用於記錄當前滾動高度

    window.myScrollHeight = 0;

   

         //定義一個全局函數,

window.doScrollTo = function(){

                   //滾動高度增加100

        window.myScrollHeight += 100;

        window.scrollTo(0, window.myScrollHeight);

       

        var nHeight = document.documentElement.scrollTop + window.screen.availHeight;

       

       

                   //如果已經滾動到底了,調用跨域加載,用於觸發提取器“采集天貓產品描述”

        if(nHeight >= document.body.scrollHeight){

                            //注意這里要加上r=Math.random(),防止因網頁緩存而不加載

            jQuery.ajax({url:"http://localhost:8090/FireSpider/html/index.html?r=" + Math.random(),crossDomain:true});

        } else {

                            //如果還沒有滾動到底,200毫秒后再次調用doScrollTo

            window.setTimeout("doScrollTo()", 200);

        }

    }

   

         //200毫秒后調用doScrollTo

    window.setTimeout("doScrollTo()", 200);

}

 

 

“采集天貓產品描述”定義為在http://localhost:8090/FireSpider/*加載完成后執行。而此網絡連接正是由scrollTo觸發加載的。

 

 

 

2.2   列表頁采集模塊

 

天貓商品列表下一頁鏈接

 

商品列表頁是分頁顯示的,列表頁都要采集。在采集每一頁列表頁的時候,都看看是否有“下一頁”鏈接,把鏈接加入采集URL中。

 

 

 

腳本

function(){

         // 如果有”下一頁”鏈接

var len = jQuery('.next').length;

 

    if(len > 0){

        var url = jQuery('.next').attr('href');

 

        return {

            nextPage:{

                type : 'data',

                value : url,

                useFor : 'url',

                tag : 'TmallProductList'

            }

        };

    }

}

 

采集列表頁商品鏈接

 

用於采集列表頁的商品鏈接,這是個xpath提取器,通過firebug可看到xpath是 .//dd[@class='detail']/a[@class='item-name']

 

 

3. 過濾器

 

需要配置過濾器的有:“天貓商品圖像”,“采集天貓產品描述”,目的是要把圖片保存到本地。

 

天貓商品圖像

 

 

采集天貓產品描述

 

 

4. 采集任務

4.1   單個商品采集任務(測試用)

這個任務只是采集一個商品,主要是用來測試看商品頁的采集是否能成功運行。

 

4.2   正式采集任務

這個是正式的采集任務,入口是商品列表頁的第一頁。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM