Python爬蟲:爬取instagram,破解js加密引數

Mrrrrr10發表於2019-04-09

instagram 是國外非常流行的一款社交網站,類似的還有像facebook、twitter,這些社交網站對於掌握時事熱點、電商資料來源和競爭對手的動態資訊的把我都是很有資料價值的,所以值錢的資料誰都想獲取,那就意味著誰都想保護,那麼下面就來聊一聊怎麼爬取ins的資訊。

一、需求分析:

爬取instagram這個使用者的圖片、評論數、點贊數、文章內容,存為Json格式

二、站點分析:

首先自行準備翻牆工具,準備好以後,開啟instagram官方賬號,同時按下F12,如下所示:

Python爬蟲:爬取instagram,破解js加密引數

切換到network選項,隨便選擇一張圖片的url,全域性搜尋,如下圖:

Python爬蟲:爬取instagram,破解js加密引數

可以發現:instagram把資料寫到了script標籤裡面,這是一種常見的做法,放到js裡面去載入,所以我們需要用到正規表示式去做匹配:

Python爬蟲:爬取instagram,破解js加密引數

解釋一下:首先爬取首頁的資料,然後正規表示式匹配script標籤傳來的後臺資料,轉換成json格式,同時還需要找出user_id和GIS_rhx_gis引數(破解js加密需要用到),最後解析資料。

爬取完首頁以後,我們就要爬取下一頁的資料了,可以發現下一頁的資料是ajax非同步載入的方式,返回的是json格式的資料,如下圖:

Python爬蟲:爬取instagram,破解js加密引數

請求的url格式為:

"https://www.instagram.com/graphql/query/?query_hash=5b0222df65d7f6659c9b82246780caa7&variables=%7B\"id\"%3A\"{id}\"%2C\"first\"%3A12%2C\"after\"%3A\"{end_cursor}\"%7D"
複製程式碼

經過我測試,發現必須要帶上 x-instagram-gis這個引數,否則會報 403 forbideen錯誤,這是ins的反爬蟲機制:

Python爬蟲:爬取instagram,破解js加密引數

那麼如何生成這個引數呢?全域性搜尋,找到這個引數的js檔案,複製一份拷貝到本地,我用的是Pycharm,一路追蹤過去,可以找到生成這個引數的方法,我總結為:

1. 從使用者首頁https://www.instagram.com/instagram/獲取user_id、rhx_gis、end_cursor引數
2. variables = '{"id":"' + id + '","first":12,"after":"' + end_cursor + '"}',對 params = rhx_gis + ":" + variables進行md5加密
3. headers加入"x-instagram-gis": params,即可進行抓取
複製程式碼

Python爬蟲:爬取instagram,破解js加密引數

生成這個引數以後,我們就可以下一頁的抓取了~

三、原始碼:

github.com/Mrrrrr10/In…

四、最後的話:

如果有幫助的話,可以給個star~,歡迎轉發和點贊,轉發請註明出處哦

相關文章