Java爬蟲Ins博主全部帖子的點贊和評論導出excel

前言

某天朋友說,能不能幫忙扒下ins的博主帖子,要全部帖子的點贊和評論,我原本準備讓會python的同事寫的,最後仍是本身順手寫了,原本一開始準備用nodejs或者js寫的,想着前端本地測試代理和導excel比較麻煩仍是用Java吧,正好很久沒寫Java了,就當回憶一波吧。html

注意點

ss你們本身準備好,否則連不上ins的,還有ins的一些反扒規則等等我就不一一列舉了, 下面說下大概的幾個點:前端

  • instagram的首頁數據是 服務端渲染的,因此首頁出現的11或12條數據是以html中的一個json結構存在的(additionalData),以後的帖子加載纔是走ajax請求的。node

  • 在2019/06以前,ins是有反爬機制的,請求時須要在請求頭加了'X-Instagram-GIS'字段。其算法是:吧啦吧啦吧啦,,,,可是在在2019/06以後, instagram已經取消了X-Instagram-GIS的校驗,因此無需再生成X-Instagram-GIS,上一點內容能夠當作歷史來了解了python

  • 關於query_hash,通常這個哈希值不用怎麼管,能夠直接寫死git

  • 特別注意:在每次請求時務必帶上自定義的header,且header裏面要有user-agent,這樣子才能使用rhx_gis來進行簽名訪問而且獲取到數據。切記!是每次訪問! 例如:github

headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    }
複製代碼
  • api的分頁(請求下一頁數據),如用戶帖子列表,大概就是下頁的參數再上一頁的page裏面, ins中一個帶分頁的ajax請求,通常請求參數會相似下面:
query_hash: a5164aed103f24b03e7b7747a2d94e3c
variables: {
"id":"1664922478",
"first":12,
"after":"AQBJ8AGqCb5c9rO-dl2Z8ojZW12jrFbYZHxJKC1hP-nJKLtedNJ6VHzKAZtAd0oeUfgJqw8DmusHbQTa5DcoqQ5E3urx0BH9NkqZFePTP1Ie7A"}
複製代碼

-- id表示用戶id,可在html中的sharedData中獲取 -- first表示初始時獲取多少條記錄,好像最可能是50 -- after表示分頁遊標,記錄了分頁獲取的位置ajax

大概思路

1,前12條數據只能能html裏面解析。 2,後面的分頁數據均可以走http請求。 3,關於分頁,第一次的分頁參數也在html裏面,後面的分頁參數都在上一個請求結果裏面。 4,因此思路就是先獲取ins的html從裏面截取前12條數據和第一次的分頁參數,後面再循環分頁請求就行。 5,最後彙總導出excel,完事。算法

代碼截圖

在這裏插入圖片描述

效果

這裏我選了范冰冰的ins導出,畢竟上面都是老外,其餘人咋也不認識。。。。json

  • 范冰冰ins首頁:
    在這裏插入圖片描述
  • 導出excel:
    在這裏插入圖片描述

GitHub

最後附上GitHub地址,對你們有幫助就start吧。。。歡迎star和PR~ 感謝泥萌!!api

github.com/BothEyes199…

相關文章
相關標籤/搜索