互聯網金融爬蟲怎麼寫-第一課 p2p網貸爬蟲(XPath入門)

相關教程:

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

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

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

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

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

工具要求:教程中主要使用到了 1、神箭手雲爬蟲 框架 這個是爬蟲的基礎,2、Chrome瀏覽器和Chrome的插件XpathHelper 這個用來測試Xpath寫的是否正確

基礎知識:本教程中主要用到了一些基礎的js和xpath語法,如果對這兩種語言不熟悉,可以提前先學習下,都很簡單

之前寫了一個電商爬蟲系列的文章,簡單的給大家展示了一下爬蟲從入門到進階的路徑,但是作為一個永遠走在時代前沿的科技工作者,我們從來都不能停止在已有的成果上,所以帶上你的chrome,拿起你的xpathhelper,打開你的神箭手,讓我們再次踏上征戰金融數據之旅吧。(上個系列相對難一些,建議如果是初學者,先看這個系列的教程)

金融數據實在是價值大,維度多,來源廣。我們到底從哪裡入手呢?想來想去,就從前一段時間風雲變幻的p2p網貸開始吧。

同樣,我們教程的一致風格就是先找個軟柿子,上來不能用力過猛,逐漸培養自己的信心,等真正敵人來的時候,才不至於怯場害怕。

我們先去搜索一下p2p網站,隨便找幾個對比一下,選中了這個滬商財富

看著這樣的收益率,心動了有木有,錢包坐不住了有木有,對餘額寶投出鄙夷的目光了有木有

好了,閑話不說,這個系列課程吸取上個系列課程里進度太快的教訓,給大家多講一些基礎的知識,這一課就結合這個實例,重點講講xpath的編寫和用法。首先,大體來講,XPath是一個相對簡單的語言,甚至都不一定能稱得上是一個語言,主要用處是用來標記XML的元素路徑。由於html也是一種xml,因此通常來說,在html中抽取某個元素是通過XPath來做的。XPath本身和Css有著很大的相似性,一般來說如果之前對Css有一定的了解的話,XPath上手還是很簡單的。具體的情況我在下面的課程中一邊寫,一邊解釋。

首先先確定列表頁:

http://www.hushangcaifu.com/invest/main.htmln

http://www.hushangcaifu.com/invest/index2.htmln

http://www.hushangcaifu.com/invest/index3.htmln

基本上可以看到列表頁除了第一頁以外都有規律可尋,不過看到這個效果,通常我們最好精益求精一下,看下第一頁是否也可以符合規律呢?

打開

http://www.hushangcaifu.com/invest/index1.htmln

果然也是第一頁,好了,很完美,總結成正則表達式:

http://www.hushangcaifu.com/invest/indexd+.html n

再看下詳情頁:

http://www.hushangcaifu.com/invest/a3939.htmln

http://www.hushangcaifu.com/invest/a3936.htmln

哈哈,小菜一碟,直接化解成正則:

http://www.hushangcaifu.com/invest/ad{4}.htmln

好了,最後最重要的就是提取頁面元素了。我們打開詳情頁:

http://www.hushangcaifu.com/invest/a3870.htmln

一般來說,我們在我們想要提取的元素上右擊,點擊審查元素,得到如下結果:

首先看到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")]n

對於class屬性,我們通常會使用contains這樣一個函數,防止一個元素有多個class的情況,另外因為class是一個屬性,因此class前面需要加上@代表選擇到該元素的一個屬性。

現在我們已經選擇到了我們要選擇的元素的父元素的父元素,只要我們繼續往下走兩層既可。

//div[contains(@class,"product-content-top-left-top")]/p/span n

由於我們要選擇元素里的文字信息,而不是整個元素,我們需要指定是這個元素的文字:

//div[contains(@class,"product-content-top-left-top")]/p/span/text() n

好了,這樣我們就確定了我們爬取的借款用戶的名稱,我們打開xpathhelper驗證一下有沒有寫錯:

完美的結果。不過大家有的時候也需要注意,因為有的網頁不代表你在一個內容頁測試成功,在其他內容頁也能成功,最好多測幾個頁面才是保險的。好了,其他的抽取項就不一一演示了,直接上最後的代碼

var configs = {n domains: ["www.hushangcaifu.com"],n scanUrls: ["http://www.hushangcaifu.com/invest/index1.html"],n contentUrlRegexes: ["http://www.hushangcaifu.com/invest/ad{4}.html"],n helperUrlRegexes: ["http://www.hushangcaifu.com/invest/indexd+.html"],n fields: [n {n name: "title",n selector: "//div[contains(@class,product-content-top-left-top)]/h3/text()",n required: true n },n {n name: "user_name",n selector: "//div[contains(@class,product-content-top-left-top)]/p/span/text()"n },n {n name: "total_money",n selector: "//div[contains(@class,product-content-top-left-middle)]/div[1]/h4/text()"n },n {n name: "project_time",n selector: "//div[contains(@class,product-content-top-left-middle)]/div[2]/h4/text()"n },n {n name: "annual_return",n selector: "//div[contains(@class,product-content-top-left-middle)]/div[3]/h4/text()"n },n {n name: "return_method",n selector: "//div[contains(@class,product-content-top-left-middle)]/div[4]/h4/text()"n }n n ]n};nnvar crawler = new Crawler(configs);ncrawler.start();n

將代碼粘貼到神箭手平台上既可運行。好了,看下運行結果:


推薦閱讀:

如何評價王家林其人?
分析處理幾十萬條以上的數據excel會很慢,也會出現數據不準的情況,請問處理這類數據大家一般都用什麼軟體?
簡單兩步,大幅提高python數據處理速度

TAG:P2P | 爬虫 | 大数据 |