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

版權聲明:本文爲博主原創文章,未經博主容許不得轉載。php

系列教程:html

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

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

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

 

老規矩,爬以前首先感謝淘寶公佈出這麼多有價值的數據,才讓咱們這些爬蟲們有東西能夠蒐集啊,不過淘寶就不用我來安利了瀏覽器

廣大剁手黨相信睡覺的時候都能把網址打出來吧。dom

工欲善其事,必先利其器,先上工具:工具

一、神箭手雲爬蟲,測試

二、Chrome瀏覽器 ui

三、Chrome的插件XpathHelper 不知道是幹嗎的同窗請移步第一課

 

好了,我們仍是先打開淘寶網:

清新的畫面,琳琅滿目的商品,隱約感到的是前方是一場惡戰:

淘寶這麼多的商品,這麼多的主題,到底從哪裏開始呢?要不就女裝了,別問我爲何,我們先打開一個女裝的列表頁面:

https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F

咱們點擊一下下一頁看看鏈接:

https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F&bcoffset=-4&s=60

看着好像不難,很簡單,不過值得注意的是,咱們把鼠標移到下一頁能夠看到鏈接自己並非這個,這個是js處理的,這種狀況相似前面咱們遇到的尚妝網下一頁,咱們一會再說。

咱們再看下詳情頁

https://item.taobao.com/item.htm?spm=a217f.7283053.1997524073.204.hEmtfc&id=527101625954&scm=1029.minilist-17.1.16&ppath=&sku=&ug=#detail
 https://item.taobao.com/item.htm?spm=a217f.7283053.1997524073.209.hEmtfc&id=528697742170&scm=1029.minilist-17.1.16&ppath=&sku=&ug=#detail

看着比較簡單,就直接提取成:

https://item\\.taobao\\.com/item\\.htm\\?.*

我比較懶,這個就先這樣吧,而後咱們來看看詳情頁咱們須要抽取哪些信息,商品名稱,價格天然不能少,此次再來一個新鮮的,就是縮略圖列表,由於淘寶的商品不僅有一個縮略圖,所以須要爬取一個縮略圖數組。

一樣,用chrome開發者工具和xpathhelper對抽取項進行分析,看了一下結果,嘗試過濾xhr,結果:

 

高手就是高手,在大量的請求中,找到響應的請求,至關的困難。沒關係,還記得咱們上節課提到的核武器嗎-JS渲染引擎,只要咱們把JS渲染引擎打開,那麼咱們徹底不用操心大量ajax請求的判斷,固然他的問題是效率低一些,不過不要緊,反正在雲上跑嘛,睡一覺就行了。

在神箭手裏調用JS渲染引擎的方式很簡單,只須要一行代碼設置既可:

configs.enableJS=true  

好了,那咱們如今能夠無視ajax請求了,直接用chrome工具打開,直接提取:

//em[@id="J_PromoPriceNum"] 
簡單暴啦,而後高興沒有1秒鐘,瞬間蒙逼,淘寶上的價格不只有這種促銷價格,還有價格區間,還有的是普通的價格,個人天的,這不是要人命嗎~

沒辦法,再難也要硬着頭皮上,目前來看,一共有兩種價格的抽取方式,固然不排除有其餘多種的狀況,咱們先對這兩種分別寫一下抽取規則:

//em[@id="J_PromoPriceNum"]  //em[contains(@class,"tb-rmb-num")] 

咱們能夠經過 | 這個來鏈接,表達不一樣頁面的選取能夠共存

//em[@id="J_PromoPriceNum"] | //em[contains(@class,"tb-rmb-num")] 

不容易。咱們再看看商品名稱,這個相對簡單:

//h3[contains(@class,'tb-main-title')]/@data-title 

最後,咱們須要抽取圖片的地址:

//ul[@id="J_UlThumb"]/li//img/@src 

 

因爲這一項存在多項,所以須要將該抽取規則的repeated字段設置成true

  var configs = { domains: ["www.taobao.com","item.taobao.com"], scanUrls: ["https://www.taobao.com/go/market/nvzhuang/citiao/taozhuangqun.php"], contentUrlRegexes: ["https://item\\.taobao\\.com/item\\.htm\\?.*"], helperUrlRegexes: ["https://www\\.taobao\\.com/go/market/nvzhuang/citiao/taozhuangqun.php"],//可留空 
        enableJS:true, fields: [ { // 第一個抽取項 
                name: "title", selector: "//h3[contains(@class,'tb-main-title')]/@data-title",//默認使用XPath 
                required: true //是否不能爲空 
 }, { // 第二個抽取項 
                name: "price", selector: "//em[@id='J_PromoPriceNum'] | //em[contains(@class,'tb-rmb-num')]",//默認使用XPath 
 }, { // 第三個抽取項 
                name: "thumbs", selector: "//ul[@id='J_UlThumb']/li//img/@src",//默認使用XPath 
 }, ] }; var crawler = new Crawler(configs); crawler.start(); 

 

好了,雖然淘寶比尚妝網難的多,可是在咱們拿出核武器以後,一切迎刃而解,回頭咱們在來處理下一頁的問題,這裏雖然和尚妝網不同,可是總體的原理大同小異,就不一一解釋,咱們直接上代碼:

  var configs = { domains: ["s.taobao.com","item.taobao.com"], scanUrls: ["https://s.taobao.com/list?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F"], contentUrlRegexes: ["https?://item\\.taobao\\.com/item\\.htm\\?.*"], helperUrlRegexes: ["https?://s\\.taobao\\.com/list\\?q=%E5%A5%97%E8%A3%85%E5%A5%B3%E5%A4%8F.*"],//可留空 
        enableJS:true, fields: [ { // 第一個抽取項 
                name: "title", selector: "//h3[contains(@class,'tb-main-title')]/@data-title",//默認使用XPath 
                required: true //是否不能爲空 
 }, { // 第二個抽取項 
                name: "price", selector: "//em[@id='J_PromoPriceNum'] | //em[contains(@class,'tb-rmb-num')]",//默認使用XPath 
                required: true //是否不能爲空 
 }, { // 第三個抽取項 
                name: "thumbs", selector: "//ul[@id='J_UlThumb']/li//img/@src",//默認使用XPath 
                repeated:true }, ] }; configs.onProcessHelperUrl = function(url, content, site){ if(!content.indexOf("未找到與")){ var currentStart = parseInt(url.substring(url.indexOf("&s=") + 3)); var start = currentStart + 60; var nextUrl = url.replace("&s=" + currentStart, "&s=" + start); site.addUrl(nextUrl); } return true; }; var crawler = new Crawler(configs); crawler.start(); 

 

OK 大功告成,測試結果以下,因爲開啓的js渲染,因此爬取的速度比較慢,只能耐心等待了。

 

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

相關文章
相關標籤/搜索