大家好啊,話說好久沒有出來活動了,組織上安排寫代碼寫了很久,終於又被放出來寫教程了,感謝大家一直的支持和厚愛,我會一如既往的幫助大家完成爬蟲工程師從入門到放棄的昇華。
好,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單選框。
具體設置如下圖:
刷新頁面之後,選中xhr小標籤之後,可以清晰的看到一個ajax請求,我們點開預覽看下:
看到這個畫面,是不是覺得祖國的天空又藍了一點?
首先,我們先確保我們可以通過直接訪問拿到這個ajax請求,我們先把這個請求的地址複製出來:
http://xueqiu.com/stock/cata/stocklist.json?page=1&size=30&order=desc&orderby=percent&type=11%2C12&_=1469588824728
然後,單獨粘貼到瀏覽器的地址欄中,訪問看看效果,爲了保證實驗的獨立性,建議大家打開一個chrome的隱身窗口,這樣可以防止之前的cookie的污染。
Oh no~ 雪球的碼農,我們出來聊一下,我保證不打死你們~
這個時候,很多初學者甚至有一定經驗的工程師都方了。不要緊,其實只要不需要登錄,我們都還是來得及下班的。
一般來說,限制來自於常見的三個情況:
1).cookie ; 2).referer ; 3).url中的參數
由於2)和3)容易測試,我們一般先測試2)和3),測試方法就是參照我們在瀏覽器中能正常訪問到時的請求,刪掉我們可能覺得不重要的參數,逐步測試。這裏非常強調的是,我們必須使用控制變量法,首先我們需要重現能夠成功獲取數據的情況,然後在一個一個變量進行調整,最終將無關的參數全部去除,並找到最核心的參數,這裏我們還需要使用一個模擬提交請求的工具。我們這裏使用的是chrome的插件Advanced REST Client。同類型的工具很多,大家也可以根據自己的習慣挑選。
我們先將cookie,referer和url完整的複製到請求中去,點擊訪問看看能不能拿到數據:
下面結果部分被截斷了,結果返回的是正常的數據。
那麼我們先來確定下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:
哈哈,可以看到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。