知乎爬蟲(一)

項目github地址:https://github.com/Lee-Jiazheng/zhihu_spider

知乎作爲一個內容平臺,有大量的新奇內容值得我們爬取,承受前人諸多知識,所以也寫點東西爲初學者提供一個學習的途徑。

 

爬蟲,就是在一張大網上不斷地爬取信息,剛開始我們只有一個小點,也稱爲種子,從這個點逐步擴張,成爲一隻大網,所以爬蟲就是一張結網的蜘蛛。

所以我們先到知乎的發現頁,方便我們搜索,https://www.zhihu.com/explore。現在要思考我們的任務,假使我們想要爬取知乎所有用戶的頭像吧,這樣涉及到的技術可能會更多,所以我們的程序應該以用戶爲核心,那麼在搜索框中搜索一個“大V”,不懂大V是什麼,我權當是粉絲比較多的人好了,程序員應該都會關注很多程序員,所以粉絲比較多的人vczh就成爲了我們的目標,就從他開始下手好了,進入他的主頁,點擊他的關注者,發現有六十萬人左右,從url也可以發現:https://www.zhihu.com/people/excited-vczh/followers,中間的excited-vczh不知道是什麼,但我們應該是知道知乎是允許重名用戶的,那我們猜測這應該是訪問用戶主頁的url就是這個了,點擊以後,發現了所有的關注者是分頁的,那這樣就輕而易舉了,正則表達式解析我們下載下來的html,不就可以獲取他們頭像的url了嗎,簡直太容易了!所以查看源代碼,編寫正則表達式,下載。

然而,(假設你已經嘗試過了),我們發現每次只能下載三個用戶,好生奇怪,明明20個用戶都在Html源代碼裏面啊,所以我查看了一下,通過python代碼下載的html,驚奇的發現只有三個用戶!這樣就顯而易見了,知乎關注者是通過js異步加載的(ajax),那麼我們只要找到這個ajax豈不是就大功告成了?

所以開始尋找這個ajax。

按F12,在這個面板Network中,選擇XHR篩選,發現有幾個可疑的請求,


看到followers?...,估計就是他了,看看返回了什麼數據,


正是我們想要的關注者數據!get it!那麼再仔細看一下這個請求:

https://www.zhihu.com/api/v4/members/excited-vczh/followers?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20

到底是什麼鬼,完全看不懂,但我們看到有兩個單詞offset和limit,可能就是分頁顯示的意思吧?每次顯示20個,那麼offset=40不就是第三頁了麼,可以點擊一下看看到底是不是這樣,所以標註一下,在後面嘗試一下只加offset和limit參數是否可以。

在瀏覽器中打開這個url,發現返回的數據竟然是error:

{"error": {"message":"\u8bf7\u6c42\u5934\u6216\u53c2\u6570\u5c01\u88c5\u9519\u8bef","code": 100, "name":"AuthenticationInvalidRequest"}}

是認證無效請求,說明這個Url並不是隨便就可以訪問的,需要一個認證授權。但我也沒登錄,怎麼認證呢?可以保存信息的幾個地方就是Cookie和Hearders唄,但我估計hearders的概率比較大。


終於在headers找到了,但是否管用就是後話了,至少找到一個解決方案,事實上我是在調用api發現不好用的過程中,才找到這個authorization的。


所以獲取數據的方法我們都找到了,下一步就是編碼了,程序員總是樂觀的,我們寄希望於所有的想法都是好用的,但一個bug就夠調試一天了,所以下一篇再繼續講編碼吧,我的運行環境是python3.5。

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