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

系列教程html

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

若是沒有看過第一課的朋友,請先移步第一課,第一課講了一些基礎性的東西,經過軟柿子"切糕王子"這個電商網站好好的練了一次手,相信你們都應該對寫爬蟲的流程有了一個大概的瞭解,那麼這課我們就話很少說,正式上戰場,對壘尚妝網。正則表達式

首先,向咱們被爬網站致敬,沒有他們提供數據,咱們更是無從爬起,因此先安利一下尚妝網:chrome

經營化妝品時尚購物,大數據爲驅動,並依託智能首飾爲入口的新一代智慧美妝正品電子商務平臺。其創始團隊來自天貓、支付寶、歐萊雅、薇姿等互聯網公司和化妝品集團。瀏覽器

好吧,我很懶,直接從百度知道里抄過來的,不過不表明我沒有誠意。OK,言歸正傳,咱們先把咱們的工具包拿出來:框架

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

古代戰士上戰場前,必須先好好的觀察對手,所謂知己知彼,百戰不殆。咱們先來觀察一下尚妝網異步

從首頁你們能看出什麼?說美女很美的,還有說美女表情很到位的同窗,大家能夠先回家了。工具

剩下的同窗,咱們繼續了:大數據

可 以看出,做爲一個完善的電商網站,尚妝網有着普通電商網站所擁有的主要的元素,包括分類,分頁,主題等等。首先咱們要肯定咱們但願要爬取哪一類數據,固然 做爲爬蟲來講,所有爬下來不是不行,不過對於作實驗來講,就不必了。好,咱們假設:咱們要爬護膚裏的面膜品類全部商品,價格和銷量,至於爲何是面膜, 大家猜呢?

廢話太多了,咱們開始爬蟲三步走,跟着我再背誦一遍:一、選入口Url 二、限定內容頁和中間頁 三、寫內容頁抽取規則

一、選定入口url

這個簡單,找到面膜頁面的地址:http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C

好,就是它了。

二、區份內容頁和中間頁

好,重點來了,尚妝網的列表頁面,是經過ajax動態加載了,這個怎麼實現呢?咱們先不着急,先看下內容頁

http://item.showjoy.com/sku/26551.html

http://item.showjoy.com/sku/100374.html

內容頁很簡單,咱們直接提取成正則表達式

http://item\\.showjoy\\.com/sku/\\d+\\.html

那麼列表頁呢?首先,第一個固然是:

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C

下一頁的連接是什麼呢?這個時候就須要藉助chrome瀏覽器的開發者工具,咱們打開工具,切換到network選項卡,向下滑動加載下一頁,能夠看到展現出的鏈接地址:

注意,能夠忽略掉png這些圖片的文件,直接看到下一頁的鏈接,咱們將連接複製出來:

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C&stock=1&page=4&_synToken=59a6c555b0947486769f35d010353cd5

看着好像很複雜,不過page我認識,其餘的能夠去掉嗎?咱們試一下訪問

http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C&page=4

貌似正常打開,並且也能夠顯示不一樣的商品,就此咱們能夠看出來,這個ajax加載下一頁不過是一個紙老虎,根本沒什麼可怕的。咱們將這個提取成正則表達式,另外 值得注意的是,因爲咱們第一頁多是沒有page的,因此也須要考慮沒有page參數的狀況

http://list\\.showjoy\\.com/search/\\?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C(&page=\\d+)?

這裏再次提醒你們,注意正則的點和問好都是要轉義的,而且轉義須要兩個\,好,第二步大功告成。

第 三步:就是寫內容頁的抽取規則了,咱們就抽取商品名稱,評價數和成交數這三項數據吧,有人要問了,爲啥不要價格呢。我只能說,too young too native,你打開商品頁面的時候,有沒有注意到價格的地方也一個快速的異步加載。考慮到我們畢竟才第二課,並且剛剛還沒那個ajax搞得虎軀一震,差 一點把這節課改爲第三課,因此我們這裏先下降點難度,下一課我們用一節課的時間來探討下這個價格該怎麼提取。

根據前面課程教的方案,咱們一樣的方法,寫出xpath:

標題://h3[contains(@class ,"choose-hd")]

評價://div[contains(@class ,"dtabs-hd")]/ul/li[2]

成交記錄://div[contains(@class ,"dtabs-hd")]/ul/li[3]

經過xpath helper進行驗證以後沒有問題,這樣咱們能夠組合代碼獲得下面的結果

var configs = {  
        domains: ["www.showjoy.com","list.showjoy.com","item.showjoy.com"],  
        scanUrls: ["http://list.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C"],  
        contentUrlRegexes: ["http://item\\.showjoy\\.com/sku/\\d+\\.html"],  
        helperUrlRegexes: ["http://list\\.showjoy\\.com/search/\\?q=cateIds%3A1,cateName%3A%E9%9D%A2%E8%86%9C(\\&page=\\d+)?"],//可留空  
        fields: [  
            {  
                // 第一個抽取項  
                name: "title",  
                selector: "//h3[contains(@class,'choose-hd')]",//默認使用XPath  
                required: true //是否不能爲空  
            },  
            {  
                // 第二個抽取項  
                name: "comment",  
                selector: "//div[contains(@class,'dtabs-hd')]/ul/li[2]",//使用正則的抽取規則  
                required: false //是否不能爲空  
            },  
            {  
                // 第三個抽取項  
                name: "sales",  
                selector: "//div[contains(@class,'dtabs-hd')]/ul/li[3]",//使用正則的抽取規則  
                required: false //是否不能爲空  
            }  
        ]  
    };  
      
    start(configs);

 

能夠看到在domains裏 我填入了三個域名,這裏是必定要注意的,由於他的列表頁和詳情頁的域名都不一致,所以須要把每個域名都寫進去。

好了,代碼運行正常,可是啓動任務以後發現,怎麼第二頁的內容沒有采集到呢? 還有前面說的價格我們也採集不到,到底還能不能愉快的玩耍了呢? 咱們第三課就給你們講講如何解決ajax頁面的url發現和ajax加載內容的提取。

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

相關文章
相關標籤/搜索