你們好啊,話說很久沒有出來活動了,組織上安排寫代碼寫了好久,終於又被放出來寫教程了,感謝你們一直的支持和厚愛,我會一如既往的幫助你們完成爬蟲工程師從入門到放棄的昇華。web
好,Previous on 系列教程:ajax
互聯網金融爬蟲怎麼寫-第一課 p2p網貸爬蟲(XPath入門)正則表達式
互聯網金融爬蟲怎麼寫-第二課 雪球網股票爬蟲(正則表達式入門)chrome
工具要求與基礎知識:json
工具要求:瀏覽器
1).神箭手雲爬蟲框架--這個是爬蟲的基礎;cookie
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。