互聯網金融爬蟲怎麼寫-第一課 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.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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章