互聯網金融爬蟲怎麼寫-第三課 雪球網股票爬蟲(ajax分析)

大家好啊,話說好久沒有出來活動了,組織上安排寫代碼寫了很久,終於又被放出來寫教程了,感謝大家一直的支持和厚愛,我會一如既往的幫助大家完成爬蟲工程師從入門到放棄的昇華。

好,Previous on  系列教程:

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

互聯網金融爬蟲怎麼寫-第二課 雪球網股票爬蟲(正則表達式入門)

工具要求與基礎知識:

工具要求:

1).神箭手雲爬蟲框架--這個是爬蟲的基礎;

2).Chrome瀏覽器和Chrome的插件XpathHelper--這個用來測試Xpath寫的是否正確;

3).Advanced REST Client--用來模擬提交請求。

基礎知識:

本教程中設計到web的一些基礎原理,如果不瞭解的,最好提前做一些功課。

開始ajax分析

咱們廢話不多說,接着上一課繼續研究雪球網,雪球網通過狂拽的js請求,直接把我們打回原形,辛辛苦苦分析半天的頁面前功盡棄,不過不要緊,咱們想爬別人數據,就不能害怕js渲染,前面的課程大多都通過種種方式繞過了js請求的方式來完成爬蟲,那麼這節課,就通過雪球網,來實實在在的面對一下我們的這個無法迴避的敵人--ajax。

首先依然打開chrome的開發者工具,點擊network的標籤。

注意事項:

1).當你打開一個頁面,再點開network標籤時是不會有信息的,我們需要在打開的情況下,刷新一下頁面;

2).爲了防止頁面突然的跳轉而丟失信息,一定要勾上preserved單選框。

具體設置如下圖:

1240


刷新頁面之後,選中xhr小標籤之後,可以清晰的看到一個ajax請求,我們點開預覽看下:

1240

看到這個畫面,是不是覺得祖國的天空又藍了一點?

1240

首先,我們先確保我們可以通過直接訪問拿到這個ajax請求,我們先把這個請求的地址複製出來:

http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12&_=1469588824728

然後,單獨粘貼到瀏覽器的地址欄中,訪問看看效果,爲了保證實驗的獨立性,建議大家打開一個chrome的隱身窗口,這樣可以防止之前的cookie的污染。

1240

Oh no~  雪球的碼農,我們出來聊一下,我保證不打死你們~

這個時候,很多初學者甚至有一定經驗的工程師都方了。不要緊,其實只要不需要登錄,我們都還是來得及下班的。

一般來說,限制來自於常見的三個情況:

1).cookie ; 2).referer ; 3).url中的參數

由於2)和3)容易測試,我們一般先測試2)和3),測試方法就是參照我們在瀏覽器中能正常訪問到時的請求,刪掉我們可能覺得不重要的參數,逐步測試。這裏非常強調的是,我們必須使用控制變量法,首先我們需要重現能夠成功獲取數據的情況,然後在一個一個變量進行調整,最終將無關的參數全部去除,並找到最核心的參數,這裏我們還需要使用一個模擬提交請求的工具。我們這裏使用的是chrome的插件Advanced REST Client。同類型的工具很多,大家也可以根據自己的習慣挑選。

我們先將cookie,referer和url完整的複製到請求中去,點擊訪問看看能不能拿到數據:

1240

下面結果部分被截斷了,結果返回的是正常的數據。

那麼我們先來確定下2)和3)是否影響,通過刪除referer以及url中不相關的參數,重新點擊訪問我們可以知道,這些參數並不影響返回結果,那這個時候,就只剩下一個可能,就是cookie,當然這個可能是我們最不希望看到了,當然cookie的問題依然分爲兩種情況:

1).http response返回的cookie設置;2).js對cookie的設置。

如果是1),那還沒什麼大不了的;如果是2)的話,那估計整個人都要不開心了。

第一件事,我們依然要把cookie中不相關的參數,特別是一些統計代碼的cookie刪除掉,他們通常很長,很乾擾,但是毫無作用。常見的百度統計有這樣一些cookie: Hm_Lpvt開頭和Hm_lvt開頭的,當然一般Hm_開頭的大概率百度統計的,其他的大家自己在做的過程中去做總結,這裏就不一一解釋了。

刪除之後發現,只要有xq_a_token這個cookie就可以返回正常的數據,那麼我們現在就找找這個cookie是在哪裏設置的。

最簡單的,先訪問一下首頁,看看response:

1240

哈哈,可以看到reponse裏面的set-cookie中已經有了xq_a_token這個參數,so easy!我們把這個cookie加入到請求中去,順利的請求到了數據,可見,在爬取這個ajax之前,只需要先訪問一下首頁就可以獲取我們需要的cookie值了。

最後我們再回頭看一下ajax的url,經過篩選剩餘的url如下:

http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12

很高興的看到了page和size,另外還居然有order和orderby,只能說雪球實在是太貼心,當然最後還有一個type,這個我們多點幾個分類就可以看出,這個是滬深一覽的分類,相對應的還有美股一覽和港股一覽。這裏我們就不做詳細介紹了。

分析就到這裏,下一課,我們會開始根據這一課的分析,完成整個代碼的編寫。

另外對爬蟲感興趣的童鞋可以加qq羣討論:566855261。


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