手把手教你寫電商爬蟲-第五課 京東商品評論爬蟲 一塊兒來對付反爬蟲

系列教程:html

手把手教你寫電商爬蟲-第一課 找個軟柿子捏捏python

手把手教你寫電商爬蟲-第二課 實戰尚妝網分頁商品採集爬蟲程序員

手把手教你寫電商爬蟲-第三課 實戰尚妝網AJAX請求處理和內容提取ajax

手把手教你寫電商爬蟲-第四課 淘寶網商品爬蟲自動JS渲染json

 

四節課過去了,我們在爬蟲界也都算見過世面的人,如今再來一些什麼ajax加載之類的小魚小蝦應該不在話下了,即便是淘寶這種大量的ajax,咱們祭上咱們的核武器,也輕鬆應對了,這一課主要是來看看除了技術上的頁面處理外,咱們還會趕上更棘手的問題,就是反爬蟲,固然如今有各類各樣的反爬蟲,今天就先介紹最簡單的一種:限制IP。瀏覽器

今天我們的對手依然是業界大佬,馬雲最忌憚的男人,宅男心中愛恨交錯的對象 - JD.COM框架

也不用我安利,特別是程序員,有幾個沒給京東送過錢的。廢話很少說,先上工具:dom

一、神箭手雲爬蟲,二、Chrome瀏覽器 三、Chrome的插件XpathHelper 不知道是幹嗎的同窗請移步第一課分佈式

打開網站瞅一眼:工具

好了,相信我,截這張圖絕對不是在虐大家這些單身狗。咱們就是科學的研究一下這個頁面,沒啥特別的:大廠風,硬仗準備。

先來挑一個分類吧,此次挑一個你們都熟悉的互聯網書類:

http://search.jd.com/Search?keyword=Python&enc=utf-8&book=y&wq=Python&pvid=33xo9lni.p4a1qb

大家的最愛,python從入門到放棄的所有資料。

和前面幾節課相似的分析這節課就不作了,對於分頁,ajax請求什麼的,你們能夠直接參考前面的四節課,這一刻主要特別的是,咱們在採集商品的同時,會將京東的商品評價採集下來。同時呢,咱們也探討下該如何應對京東對IP的限制,OK,先直接上代碼:

var configs = {  
    domains: ["search.jd.com","item.jd.com","club.jd.com"],  
    scanUrls: ["http://search.jd.com/Search?keyword=Python&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&page=1&s=1&click=0"],  
    contentUrlRegexes: ["http://item\\.jd\\.com/\\d+.html"],  
    helperUrlRegexes: ["http://search\\.jd\\.com/Search\\?keyword=Python&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&page=\\d+&s=1&click=0"],//可留空  
    fields: [  
        {  
            // 第一個抽取項  
            name: "title",  
            selector: "//div[@id='name']/h1",//默認使用XPath  
            required: true //是否不能爲空  
        },  
        {  
            // 第一個抽取項  
            name: "productid",  
            selector: "//div[contains(@class,'fl')]/span[2]",//默認使用XPath  
            required: true //是否不能爲空  
        },  
        {  
            name: "comments",  
            sourceType: SourceType.AttachedUrl,  
            attachedUrl: "http://club.jd.com/productpage/p-{productid}-s-0-t-3-p-0.html",  
            selectorType: SelectorType.JsonPath,  
            selector: "$.comments",  
            repeated: true,  
            children:[  
                {  
                    name: "com_content",  
                    selectorType: SelectorType.JsonPath,  
                    selector: "$.content"  
                },  
                {  
                    name: "com_nickname",  
                    selectorType: SelectorType.JsonPath,  
                    selector: "$.nickname"  
                },  
            ]  
        }  
    ]  
};  
configs.onProcessHelperUrl = function(url, content, site){  
    if(!content.indexOf("抱歉,沒有找到")){  
        var currentPage = parseInt(url.substring(url.indexOf("&page=") + 6));  
        if(currentPage == 0){  
            currentPage = 1;  
        }  
        var page = currentPage + 2;  
        var nextUrl = url.replace("&page=" + currentPage, "&page=" + page);  
        site.addUrl(nextUrl);  
    }  
    return true;  
};  
var crawler = new Crawler(configs);  
crawler.start();

這裏主要給你們講一下這個評論的配置,因爲評論是多項,且評論還有子項,在框架中,是經過children關鍵字來配置的。具體參照代碼既可,咱們能夠在子項中在定義不一樣的字段,像這裏的comments抽取項會有content和nickname兩個子抽取項,分別對應的是評論的內容和暱稱。

這裏是一個簡化的版本,因爲京東頁面相對很複雜,咱們在抽取評論的時候,只抽取前一部分評論,固然咱們還能夠拿到更多的信息,包括評論數,評論人的等級等等,這裏你們就自行探索吧。

最後,因爲京東會對IP進行封鎖,雖說神箭手會自動分佈式開啓爬蟲,不過依然扛不住京東大叔的封鎖,所以這裏須要經過接入代理IP解決這樣的問題,相似開啓js渲染,爬取速度會大大降低,須要你們耐心等待結果嘍,代碼以下:

configs.enableProxy = true;  


大功告成,開啓爬蟲,喝杯咖啡,京東商品的評論就能夠看到啦:

評論由於是數字,所以會存儲的時候,會直接存儲成json格式:

對爬蟲感興趣的童鞋能夠加qq羣討論:342953471。

相關文章
相關標籤/搜索