【2023知乎爬蟲】知友怎么看待《羅剎海市》?爬了上千條知乎回答!
您好,我是@馬哥python說,一枚10年程序猿。
一、爬取目標(biāo)
之前我分享過一篇知乎評(píng)論的爬蟲教程:

但是學(xué)習(xí)群中的小伙伴強(qiáng)烈要求爬取知乎回答,所以本次分享知乎回答的爬蟲。
二、展示爬取結(jié)果
老規(guī)矩,先展示結(jié)果。
最近《羅剎海市》這首歌比較火,就爬這個(gè)問題下的回答吧:如何評(píng)價(jià)刀郎的新歌《羅剎海市》?

爬取了前200多頁,每頁5條數(shù)據(jù),共1000多條回答。(程序設(shè)置的自動(dòng)判斷結(jié)束頁,我是手動(dòng)break的) 共爬到13個(gè)字段,包含:問題id,頁碼,答主昵稱,答主性別,答主粉絲數(shù),答主主頁,答主簽名,回答id,回答時(shí)間,評(píng)論數(shù),點(diǎn)贊數(shù),喜歡數(shù),回答內(nèi)容。
三、講解代碼
3.1 分析頁面
我是通過知乎的ajax接口爬的。打開一個(gè)知乎問題,Chrome瀏覽器按F12進(jìn)入開發(fā)者模式之后,多往下翻幾頁回答,就會(huì)找到目標(biāo)請(qǐng)求地址,如下:

每翻一次頁,就會(huì)出現(xiàn)一個(gè)請(qǐng)求,請(qǐng)求中含5條回答數(shù)據(jù)。
3.2 開發(fā)爬蟲
首先,導(dǎo)入需要用到的庫:
定義一個(gè)請(qǐng)求頭:
這里,我僅設(shè)置了user-agent足矣。(如果數(shù)據(jù)量仍未滿足且遇到反爬,請(qǐng)嘗試增加cookie等其他請(qǐng)求頭解決)
定義請(qǐng)求地址(含指定問題id):
發(fā)送請(qǐng)求,并接收數(shù)據(jù):
定義一些空列表用于存放解析后數(shù)據(jù):
以"回答內(nèi)容"字段為例:
其他字段同理,不再贅述。
把數(shù)據(jù)保存為Dataframe并進(jìn)一步保存到csv文件:
保存到csv時(shí)加上encoding='utf_8_sig'參數(shù),防止產(chǎn)生亂碼問題。
至此,核心代碼邏輯講解完畢。完整代碼還包括:轉(zhuǎn)換時(shí)間格式、轉(zhuǎn)換性別、正則表達(dá)式清洗回答內(nèi)容、循環(huán)內(nèi)判斷結(jié)束頁等功能,詳見文末獲取。
代碼中,question_id換成任意知乎問題id,即可爬取該問題的對(duì)應(yīng)回答。
四、同步視頻
代碼演示視頻:

五、獲取完整源碼
愛學(xué)習(xí)的小伙伴,本次分析過程的完整python源碼及結(jié)果數(shù)據(jù),我已打包好,并上傳至我的微信公眾號(hào)"老男孩的平凡之路",后臺(tái)回復(fù)"爬知乎回答"即可獲??!

我是@馬哥python說 ,持續(xù)分享python源碼干貨中!