1. 程式人生 > >Python爬蟲從入門到放棄(十八)之 Scrapy爬取所有知乎使用者資訊(上)

Python爬蟲從入門到放棄(十八)之 Scrapy爬取所有知乎使用者資訊(上)

本文出自“python修行路”部落格,http://www.cnblogs.com/zhaof/p/7215617.html

爬取的思路

首先我們應該找到一個賬號,這個賬號被關注的人和關注的人都相對比較多的,就是下圖中金字塔頂端的人,然後通過爬取這個賬號的資訊後,再爬取他關注的人和被關注的人的賬號資訊,然後爬取被關注人的賬號資訊和被關注資訊的關注列表,爬取這些使用者的資訊,通過這種遞迴的方式從而爬取整個知乎的所有的賬戶資訊。整個過程通過下面兩個圖表示:

爬蟲分析過程

其次我們要獲取這個賬號的關注列表和被關注列表

這裡我們需要通過抓包分析如果獲取這些列表的資訊以及使用者的個人資訊內容
當我們檢視他關注人的列表的時候我們可以看到他請求瞭如下圖中的地址,並且我們可以看到返回去的結果是一個json資料,而這裡就存著一頁關乎的使用者資訊。

上面雖然可以獲取單個使用者的個人資訊,但是不是特別完整,這個時候我們獲取一個人的完整資訊地址是當我們將滑鼠放到使用者名稱字上面的時候,可以看到傳送了一個請求:

我們可以看這個地址的返回結果可以知道,這個地址請求獲取的是使用者的詳細資訊:

這裡我們可以從請求的這兩個地址裡發現一個問題,關於使用者資訊裡的url_token其實就是獲取單個使用者詳細資訊的一個憑證也是請求的一個重要引數,並且當我們點開關注人的的連結時發現請求的地址的唯一標識也是這個url_token

建立專案進行再次分析

通過命令建立專案
scrapy startproject zhihu_user
cd zhihu_user
scrapy genspider zhihu 

www.zhihu.com

直接通過scrapy crawl zhihu啟動爬蟲會看到如下錯誤:

 

這個問題其實是爬取網站的時候經常碰到的問題,大家以後見多了就知道是怎麼回事了,是請求頭的問題,應該在請求頭中加User-Agent,在settings配置檔案中有關於請求頭的配置預設是被註釋的,我們可以開啟,並且加上User-Agent,如下:

關於如何獲取User-Agent,可以在抓包的請求頭中看到也可以在谷歌瀏覽裡輸入:chrome://version/ 檢視
這樣我們就可以正常通過程式碼訪問到知乎了
然後我們可以改寫第一次的請求,這個我們前面的scrapy文章關於spiders的時候已經說過如何改寫start_request,我們讓第一次請求分別請求獲取使用者列表以及獲取使用者資訊

這個時候我們再次啟動爬蟲

我們會看到是一個401錯誤,而解決的方法其實還是請求頭的問題,從這裡我們也可以看出請求頭中包含的很多資訊都會影響我們爬取這個網站的資訊,所以當我們很多時候直接請求網站都無法訪問的時候就可以去看看請求頭,看看是不是請求頭的哪些資訊導致了請求的結果,而這裡則是因為如下圖所示的引數:

 

所以我們需要把這個引數同樣新增到請求頭中:

 

然後重新啟動爬蟲,這個時候我們已經可以獲取到正常的內容

到此基本的分析可以說是都分析好了,剩下的就是具體程式碼的實現,在下一篇文張中寫具體的實現程式碼內容!