python3 爬蟲 之只需要問題id爬取知乎問題全部回答

先打個定心丸,本文所需要的技術點真的不難,我本來想要直接放代碼的,但發現這次的不像之前寫過的《 》那樣需要解碼,所以這次想一步一步來教你實現。

首先要明白的一點

現在大多數網站在返回數據時,並沒有一下子返回全部的數據,而是通過Ajax分批返回數據,所以我們可以利用這一點,找到觸發返回數據的規律,獲取動態返回的數據。

獲取動態請求數據的url

打開一個知乎多一點回答的問題:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

向下滑動查看回答,注意右側瀏覽器的滾動條,它每次滑動到距離頂部一定的距離會向上返回一點距離,此時就是在動態加載回答數據了:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

按F12查看上一步瀏覽器之怎麼把數據動態請求數據的:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

通過觀察得到,當瀏覽器滾動條滾動到距離底部一定的距離會動態請求下面箭頭所指的鏈接並加載數據,而且只有紅色矩形的數字變化(一次增加5):

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

通過觀察上面圖片中的的紅色矩形,發現整個請求url只有紅色矩形的數字按每次增加5在變化,這樣我們就獲取到我們想要的請求url了:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

探索下動態請求的url,有小驚喜

在瀏覽器中打開上面的鏈接:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

數據很亂怎麼辦?沒事,我們有Json在線解析與格式: https://www.json.cn/ :

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

發現個”小驚喜“,可以判斷請求的數據是否請求完,稍微做下判斷就可以動態爬取數據了,當然你可以根據前面說的沒請求一次就增加5來實現,但是我還是喜歡前者:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

開始編碼

先寫一個模擬前面把url複製到瀏覽器中請求的函數:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

再寫一個解析數據的函數:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

然後再寫一個判斷是是否爬取完數據、獲取下個url的函數:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

真正開始爬取:

python3 爬蟲 之只需要問題id爬取知乎問題全部回答

寫在後面,本文主要是帶大家走一遍流程,如果需要爬取其他的問題直接換問題的id就可以了。源碼可以點擊下面的拓展連接查看GitHub,最後喜歡的可以點個贊啥的和關注我一起學習python相關技術。


分享到:


相關文章: