天天看點

instagram動态網頁圖檔内容爬取(一)

學習了python兩個多月,前期的python基礎和python爬蟲入門都是在中國大學mooc平台上學習的,都是北理嵩天老師開設的兩門課程,很适合像我一樣的小白初學者學習。

python語言程式設計:http://www.icourse163.org/learn/BIT-268001?tid=1002788003

python網絡爬蟲與資訊提取:http://www.icourse163.org/learn/BIT-1001870001?tid=1002781006

後續還在慕課網上進行了爬蟲入門課程的學習: http://www.imooc.com/learn/563

該課程主要采用面向對象的方式,進行了爬蟲程式的開發,老師講的很細很好,推薦。這個課程不僅讓我對爬蟲相關知識進行拓展和鞏固,同時也知道面對對象的程式設計方式在實際程式中的運用(不再是animal,dog,cat的例子了)。

廢話不多說了直接進入正題:在後續探索爬蟲過程中,我發現了一個問題,有些網頁的源代碼打開後沒有我們需要爬取的内容(或者不全),後續内容均為動态加載的,源代碼沒有變,比如這次我要爬取的ins頁面上使用者上傳的照片(由于不可明說的原因ins需要翻牆才能通路)。

第一步:爬取基本網頁圖檔内容(以NASA ins首頁為例)

F12檢視源代碼發現,需要爬取的圖檔資訊在這個“<scripttype="text/javascript">window._sharedData =”下面,還非常友好的以json格式儲存:

instagram動态網頁圖檔内容爬取(一)

其中,本次爬取任務最重要的圖URL位址在”display”下面:

instagram動态網頁圖檔内容爬取(一)

後續就簡單了寫程式爬取

instagram動态網頁圖檔内容爬取(一)

首頁及我程式中base_url的相關内容擷取。擷取的内容均是json格式,根據具體需要爬取其中的内容即可。我這裡主要就爬取了url、點贊數、評論數。

instagram動态網頁圖檔内容爬取(一)

OK,第一步基本頁面上面的圖檔資訊就爬取完畢。當我們下拉網頁的時候發現,有新的圖檔加載出來,而這些内容在之前我們爬取的“<scripttype="text/javascript">window._sharedData =”裡面并沒有,這怎麼搞呢?

第二步:爬取後續加載圖檔内容

還是F12大法,這次就要檢視一下Network裡面到底每次給我們響應的什麼内容:

instagram動态網頁圖檔内容爬取(一)

發現紅框内容最初隻有我們能看見的12張圖檔内容:

instagram動态網頁圖檔内容爬取(一)

當下拉的時候,就發現裡面多出了新加載的12張圖檔:

instagram動态網頁圖檔内容爬取(一)

主要關注的紅框這一條url,打開這條url:

”https://www.instagram.com/graphql/query/?query_hash=76d9c5f9c2d88aa251ece9ea61fdc570&variables=%7B%22id%22%3A%22528817151%22%2C%22first%22%3A12%2C%22after%22%3A%22AQCxI0PXrVr_77JeVWMLDL2Ows0hcYey2eXQWhbKFQgcMvVw3CAKKmy_AhOzaVIuo9jzBQWinakpJ8e-WQz1WO1Qage7wrGs9Dt95b9MGGP56g%22%7D”

發現裡面就是需要的新加載圖檔的資訊:

instagram動态網頁圖檔内容爬取(一)

同樣很友好是json格式,那還等什麼直接下程式爬取内容吧。

instagram動态網頁圖檔内容爬取(一)
instagram動态網頁圖檔内容爬取(一)

我之前爬取後用html 格式輸出的部分内容:

instagram動态網頁圖檔内容爬取(一)

基本上爬取ins上面的照片内容就完成,不過這隻是做到爬取ins的第一步,特别是後續加載的網頁每次都要通過F12檢視url不是很麻煩,後面就是通過base_url直接判斷擷取後續url進行爬取。

源代碼:https://github.com/fangfucdwin/ins-cwal

面向對象:https://github.com/fangfucdwin/ins_craw2

本人第一篇博文,望各種網友覺得有用的點個贊,各種大神多指點指點。