相關教程:javascript
手把手教你寫電商爬蟲-第二課 實戰尚妝網分頁商品採集爬蟲java
手把手教你寫電商爬蟲-第三課 實戰尚妝網AJAX請求處理和內容提取正則表達式
手把手教你寫電商爬蟲-第四課 淘寶網商品爬蟲自動JS渲染chrome
手把手教你寫電商爬蟲-第五課 京東商品評論爬蟲 一塊兒來對付反爬蟲瀏覽器
工具要求:教程中主要使用到了 一、神箭手雲爬蟲 框架 這個是爬蟲的基礎,二、Chrome瀏覽器和Chrome的插件XpathHelper 這個用來測試Xpath寫的是否正確框架
基礎知識:本教程中主要用到了一些基礎的js和xpath語法,若是對這兩種語言不熟悉,能夠提早先學習下,都很簡單dom
以前寫了一個電商爬蟲系列的文章,簡單的給你們展現了一下爬蟲從入門到進階的路徑,可是做爲一個永遠走在時代前沿的科技工做者,咱們歷來都不能中止 在已有的成果上,因此帶上你的chrome,拿起你的xpathhelper,打開你的神箭手,讓咱們再次踏上征戰金融數據之旅吧。(上個系列相對難一 些,建議若是是初學者,先看這個系列的教程)函數
金融數據實在是價值大,維度多,來源廣。咱們到底從哪裏入手呢?想來想去,就從前一段時間風雲變幻的p2p網貸開始吧。工具
一樣,咱們教程的一致風格就是先找個軟柿子,上來不能用力過猛,逐漸培養本身的信心,等真正敵人來的時候,纔不至於怯場懼怕。
咱們先去搜索一下p2p網站,隨便找幾個對比一下,選中了這個滬商財富
看着這樣的收益率,心動了有木有,錢包坐不住了有木有,對餘額寶投出鄙夷的目光了有木有
好了,閒話不說,這個系列課程吸收上個系列課程裏進度太快的教訓,給你們多講一些基礎的知識,這一課就結合這個實例,重點講講xpath的編寫和用 法。首先,大致來說,XPath是一個相對簡單的語言,甚至都不必定能稱得上是一個語言,主要用處是用來標記XML的元素路徑。因爲html也是一種 xml,所以一般來講,在html中抽取某個元素是經過XPath來作的。XPath自己和Css有着很大的類似性,通常來講若是以前對Css有必定的了 解的話,XPath上手仍是很簡單的。具體的狀況我在下面的課程中一邊寫,一邊解釋。
首先先肯定列表頁:
http://www.hushangcaifu.com/invest/main.html
http://www.hushangcaifu.com/invest/index2.html
http://www.hushangcaifu.com/invest/index3.html
基本上能夠看到列表頁除了第一頁之外都有規律可尋,不過看到這個效果,一般咱們最好精益求精一下,看下第一頁是否也能夠符合規律呢?
打開http://www.hushangcaifu.com/invest/index1.html 果真也是第一頁,好了,很完美,總結成正則表達式:
http://www\\.hushangcaifu\\.com/invest/index\\d+\\.html
再看下詳情頁:
http://www.hushangcaifu.com/invest/a3939.html
http://www.hushangcaifu.com/invest/a3936.html
哈哈,小菜一碟,直接化解成正則:
http://www\\.hushangcaifu\\.com/invest/a\\d{4}\\.html
好了,最後最重要的就是提取頁面元素了。咱們打開詳情頁:
http://www.hushangcaifu.com/invest/a3870.html
通常來講,咱們在咱們想要提取的元素上右擊,點擊審查元素,獲得以下結果:
首先看到yanh1147這個元素有沒有整個網頁惟一的class,id或者其餘屬性,能夠看到,在這個頁面中沒有,那麼咱們就往上找,上一級的p 標籤也沒有,我們再往上找,在上一級是一個<div class="product-content-top-left-top">,終於有class了,讓咱們祈禱這個class是惟一的 吧,ctrl+f打開搜索框,輸入product-content-top-left-top,能夠看到,找到了1 of 1,這個表明一共一個,這個是第一個,這就是咱們但願的結果,好了,只用找到這一級既可,咱們來構造整個的xpath,通常來講xpath咱們並不會從最 頂層的html開始寫,由於沒有必要,所以咱們要使用//,這個表示不知中間有多少的層級。接着咱們直接把剛剛找到的這個div寫上去,獲得這個表達式:
//div[contains(@class,"product-content-top-left-top")]
對於class屬性,咱們一般會使用contains這樣一個函數,防止一個元素有多個class的狀況,另外由於class是一個屬性,所以class前面須要加上@表明選擇到該元素的一個屬性。
如今咱們已經選擇到了咱們要選擇的元素的父元素的父元素,只要咱們繼續往下走兩層既可。
//div[contains(@class,"product-content-top-left-top")]/p/span
因爲咱們要選擇元素裏的文字信息,而不是整個元素,咱們須要指定是這個元素的文字:
//div[contains(@class,"product-content-top-left-top")]/p/span/text()
好了,這樣咱們就肯定了咱們爬取的借款用戶的名稱,咱們打開xpathhelper驗證一下有沒有寫錯:
完美的結果。不過你們有的時候也須要注意,由於有的網頁不表明你在一個內容頁測試成功,在其餘內容頁也能成功,最好多測幾個頁面纔是保險的。好了,其餘的抽取項就不一一演示了,直接上最後的代碼。
var configs = { domains: ["www.hushangcaifu.com"], scanUrls: ["http://www.hushangcaifu.com/invest/index1.html"], contentUrlRegexes: ["http://www\\.hushangcaifu\\.com/invest/a\\d{4}\\.html"], helperUrlRegexes: ["http://www\\.hushangcaifu\\.com/invest/index\\d+\\.html"], fields: [ { name: "title", selector: "//div[contains(@class,'product-content-top-left-top')]/h3/text()", required: true }, { name: "user_name", selector: "//div[contains(@class,'product-content-top-left-top')]/p/span/text()" }, { name: "total_money", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[1]/h4/text()" }, { name: "project_time", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[2]/h4/text()" }, { name: "annual_return", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[3]/h4/text()" }, { name: "return_method", selector: "//div[contains(@class,'product-content-top-left-middle')]/div[4]/h4/text()" } ] }; var crawler = new Crawler(configs); crawler.start();
將代碼粘貼到神箭手平臺上既可運行。好了,看下運行結果:
對爬蟲感興趣的童鞋能夠加qq羣討論:342953471。