zhihu_spider
此項目的功能是爬取知乎用戶信息以及人際拓撲關系,爬蟲框架使用scrapy,數據存儲使用mongo,下載這些數據感覺也沒什么用,就當為大家學習scrapy提供一個例子吧。代碼地址:https://github.com/LiuRoy/zhihu_spider,歡迎各位大神指出問題,另外知乎也歡迎大家關注哈 ^_^.
流程圖
- 請求https://www.zhihu.com獲取頁面中的_xsrf數據,知乎開啟了跨站請求偽造功能,所有的POST請求都必須帶上此參數。
- 提交用戶名,密碼已經第一步解析的_xsrf參數到https://www.zhihu.com/login/email,登陸獲取cookies
- 訪問用戶主頁,以我的主頁為例https://www.zhihu.com/people/weizhi-xiazhi, 如下圖:
- 解析的用戶信息包括昵稱,頭像鏈接,個人基本信息還有關注人的數量和粉絲的數量。這個頁面還能獲取關注人頁面和粉絲頁面。
- 由上一步獲取的分頁列表頁面和關注人頁面獲取用戶人際關系,這兩個頁面類似,唯一麻煩的是得到的靜態頁面最多只有二十個,獲取全部的人員必須通過POST請求,解析到的個人主頁再由上一步來解析。
代碼解釋
scrapy文檔非常詳細,在此我就不詳細講解,你所能碰到的任何疑問都可以在文檔中找到解答。
- 爬蟲框架從start_requests開始執行,此部分會提交知乎主頁的訪問請求給引擎,並設置回調函數為post_login.
- post_login解析主頁獲取_xsrf保存為成員變量中,並提交登陸的POST請求,設置回調函數為after_login.
- after_login拿到登陸后的cookie,提交一個start_url的GET請求給爬蟲引擎,設置回調函數parse_people.
- parse_people解析個人主頁,一次提交關注人和粉絲列表頁面到爬蟲引擎,回調函數是parse_follow, 並把解析好的個人數據提交爬蟲引擎寫入mongo。
- parse_follow會解析用戶列表,同時把動態的人員列表POST請求發送只引擎,回調函數是parse_post_follow,把解析好的用戶主頁鏈接請求也發送到引擎,人員關系寫入mongo。
- parse_post_follow單純解析用戶列表,提交用戶主頁請求至引擎。
效果圖