雖然這是一個很久以前的問題。但是看到好多答案的辦法有點太重了,這里分享一個效率更優、資源占用更低的方法。
首先請一定記住,瀏覽器環境對內存和CPU的消耗都非常嚴重,模擬瀏覽器環境的爬蟲代碼要盡可能避免。請記住,對于一些前端渲染的網頁,雖然在html源碼中看不到我們需要的數據,但是更大的可能是它會通過另一個請求拿到純數據(很大可能以JSON格式存在),我們不但不需要模擬瀏覽器,反而可以省去解析HTML的消耗。
然后,我們以北郵人論壇為目標!打開北郵人論壇的首頁,發現它的首頁HTML源碼中確實沒有頁面所顯示文章的內容,那么,很可能這是通過JS異步加載到頁面的。通過瀏覽器開發工具(Chrome瀏覽器在OS X下通過command+option+i或Win/linux下通過F12)分析在加載首頁的時候請求,容易發現,如下截圖中的請求:
截圖中選中的請求得到的response即是首頁的文章鏈接,在preview選項中可以看到渲染后的預覽圖:
至此,我們確定這個鏈接可以拿到首頁的文章及鏈接。在headers選項中,有這次請求的請求頭及請求參數,我們通過Python模擬這次請求,即可拿到相同的響應。再配合BeautifulSoup等庫解析HTML,即可得到相應的內容了。
對于如何模擬請求和如何解析HTML,小編有時間在再寫,大家記得關注一下,以后常分享給大家好的文章!