去年(手動(dòng)滑稽)某日想爬取知乎特定話題下的全部回答數(shù)據(jù),于是翻出以前寫(xiě)的知乎話題爬蟲(chóng)跑運(yùn)行了下扮休,沒(méi)想到遇到一個(gè)一直沒(méi)能解決的bug,貌似是抓包到的API返回的JSON數(shù)據(jù)格式有問(wèn)題征炼,于是遭遇爬知乎的滑鐵盧摩泪。幸而想起有個(gè)叫“Zhihu-OAuth”的庫(kù)捷绑,于是了解了下并上手一用韩脑,還蠻方便的,于是介紹給想爬取知乎數(shù)據(jù)的小伙伴們粹污。
這是知乎用戶“7sDream”開(kāi)源的Python庫(kù)段多,github地址。
其中能爬取的數(shù)據(jù)非常全壮吩、非常豐富:用戶動(dòng)態(tài)进苍、答案、文章鸭叙、收藏夾觉啊、專(zhuān)欄、評(píng)論沈贝、首頁(yè)信息流柄延、知乎live、特定用戶的信息缀程、分享、問(wèn)題市俊、話題杨凑、私信會(huì)話和私信信息等等全部囊括在內(nèi)。
使用的方法也很簡(jiǎn)單摆昧,先是安裝庫(kù)撩满,zhihu_oauth 支持 Python 2 和 Python 3:
pip install zhihu-oauth
接下來(lái)以爬取知乎特定話題下的全部回答為例,簡(jiǎn)單介紹下該庫(kù)用法绅你。以下為登錄知乎伺帘,并保存token的代碼。
其中賬號(hào)和密碼需要每個(gè)人自己輸入忌锯。賬號(hào)為郵箱或手機(jī)號(hào)(前綴"+86")伪嫁。
后續(xù)就可以直接加載token來(lái)登錄知乎。本回爬取的知乎話題為“長(zhǎng)大是什么感覺(jué)偶垮?”
鏈接為:https://www.zhihu.com/question/27987434
ID為:“27987434”张咳。
具體代碼如下帝洪,其中answers為生成器,需要用for循環(huán)來(lái)提取每個(gè)回答的數(shù)據(jù)脚猾,具體都能提取那些數(shù)據(jù)可以參見(jiàn):Answer類(lèi)的文檔說(shuō)明葱峡。包含了幾乎所有可以提取的數(shù)據(jù)。
代碼里注釋掉了答主的諸多信息龙助,因?yàn)榘l(fā)現(xiàn)提取時(shí)很容易被知乎反爬限制砰奕,而顯示IP或賬號(hào)異常,從而需要輸入驗(yàn)證碼提鸟。
最后保存數(shù)據(jù)用的是pandas庫(kù)军援,全文代碼也是在jupyter notebook里一步步運(yùn)行的。此處因人而異沽一,其他存儲(chǔ)方式亦可盖溺。
本文簡(jiǎn)單介紹下Zhihu-OAuth庫(kù),因?yàn)樯鲜诌€蠻簡(jiǎn)單的铣缠,很推薦想爬知乎數(shù)據(jù)而不得的小伙伴嘗試下烘嘱。后續(xù)看情況會(huì)更詳細(xì)的講下其他用法,看大家覺(jué)得需要嗎蝗蛙?