抖音爬蟲從0到1-第二彈:獲取抖音用戶數據


相關文章:
抖音 x-gorgon 03 免費生成接口
抖音爬蟲從0到1-第一彈:環境配置
抖音爬蟲從0到1-第二彈:獲取抖音用戶數據


前言

因為最終目的是要抓取抖音視頻數據,而通過抓包發現請求抖音的視頻數據都需要對應用戶的sec_id,這個加密的id的生成過程我們是不知道的,但是我們可以從抖音用戶的數據包中看到對應的sec_id,而且這個加密的id不會變的,所以我可以先爬取用戶的數據,但通過用戶的關注列表以及粉絲列表獲取其他用戶的sec_id,知道了用戶的數據,我們就可以爬取用戶的視頻數據了。這一篇文章我將介紹抖音用戶數據爬取。 如果實踐過程中有任何問題,請關注公共號:kedalongkeai 留言,我會統一解答。

一、分析用戶請求包

如果你已經配置好環境(手機上安裝好了抖音app並且抓包軟件等也都配置好了),就可以開心食用下文,否則請查看環境配置然后再繼續本文。

1. 分析用戶數據

打開抖音,進入抖音發布者個人頁面:(點擊右方發布者頭像進入發布者個人頁面)
點擊右方發布者頭像進入發布者個人頁面
這個時候我們查看fiddle抓到的包,我們發現對應的數據的請求地址都是包含“aweme”樣式的url,fiddle右上角就是我們的請求數據,右下角就是對應的響應數據:
用戶數據信息
因為我的爬取思路是根據用戶的關注列表爬取關注列表的關注列表,所以我不太關注用戶本身的數據,我更感興趣的是用戶的關注列表數據以及粉絲數據,那怎么看用戶的關注列表呢?

查看用戶觀看列表
這樣我們就可以看到用戶的關注列表了,那么對應的抓包軟件抓到的包是什么呢:

關注和追隨
從圖中我們可以看到follower就是用戶的粉絲數據,following就是用戶關注的用戶。對應的請求頭和響應數據如下圖所示:

在這里插入圖片描述

1.1. 請求頭分析

我們首先分析請求數據:
請求數據
請求數據包括對應的url(也就是api),對應的header數據,其中headers里面有Host、Connection、CookieAccept-EncodingX-SS-QUERIESX-SS-REQ-TICKETX-Tt-Token、sdk-version、User-AgentX-KhronosX-Gorgon、X-Pods

  • 我們首先介紹對應的url
    api = "https://api.amemv.com/aweme/v1/user/follower/list/?" \ # url
          "user_id={}" \   # user_id 可以在用戶關注列表中搞到
          "&max_time={}" \ # 當前時間戳
          "&count=20&offset=0&source_type=1&address_book_access=2&gps_access=2" \ # 不重要
          "&ts={}" \ # 當前時間戳
          "&js_sdk_version=1.16.3.5&app_type=normal&manifest_version_code=630" \ # 不重要
          "&_rticket={}" \ # 當前時間戳
          "&ac=wifi&device_id=47012747444&iid=1846815477740845" \ # 不重要
          "&os_version=8.0.0&channel=wandoujia_aweme1&version_code=630" \ # 不重要
          "&device_type=HUAWEI%20NXT-AL10&language=zh&resolution=1080*1812&openudid=b202a24eb8c1538a" \ # 不重要
          "&update_version_code=6302&app_name=aweme&version_name=6.3.0&os_api=26&device_brand=HUAWEI&ssmix=a" \ # 不重要
          "&device_platform=android&dpi=480&aid=1128" \ # 不重要
          "&sec_user_id={}"\  # 加密的uid 可以在用戶關注列表中搞到
          ".format(user_id, max_time, ts, _rticket, sec_user_id)

根據上面的api,我們發現大部分的數據我們是可以構造的,只有user_id以及加密的sec_user_id我們無法自己構造,但是我們可以通過用戶的關注列表中獲取到它關注的所有的用戶的user_id和sec_user_id,所以我們只需要知道一個用戶的user_id和sec_user_id,我們就可以獲取和他關聯的用戶以及和他關聯的用戶的用戶的user_id和sec_user_id。

  • 下面我們分析對應的請求頭:
Host: api.amemv.com # 對應的host 不變
Connection: keep-alive # 不變,不重要
Cookie: "cookies"  # 重要,不變,你自己的cookie,可以在fiddle中看到
Accept-Encoding: gzip # 不變
X-SS-REQ-TICKET: 1606999477776 # 當前的時間戳,我們可以自己構造
X-Tt-Token:  003ea17385e4...23bbe199e41467-1.0.0 # 你自己的token,重要,不變,可以在fiddle中看到
sdk-version: 1 # 不變
User-Agent: com.ss.a....0.2991.0) # 重要,你自己的ua,可以在fiddle中看到
X-Khronos: 1606999477 # 當前時間戳
X-Gorgon: 03006cc00000d7464322a76ab998c12eef987b81af552788dabd # 重要,我后面會講怎么獲取
X-Pods: # 不重要,可以不要它

通過分析請求頭,我們發現大部分數據是不變的,而且我們都可以通過Fiddle獲得,唯一不能獲得的或者說會發生改變的是:X-Gorgon,通過反編譯抖音APK,我們發現它是根據請求的url和cookies和token等生成的,我已經實現了對應的生成算法並且開放了一個X-Gorgon生成接口,大家可以免費獲取,但是注意請求格式:具體請參考文章:抖音 x-gorgon 03 免費生成接口

這里貼一下對應的請求X-Gorgon的代碼:
假設我們已經知道了我們自己的cookies和token以及我們請求的url那么我們可以獲取到對應的X-Gorgon:

# 獲取當前時間戳:
ts = str(time.time()).split(".")[0]
_rticket = str(time.time() * 1000).split(".")[0]
max_time = ts
user_id = "96244072243"
sec_user_id = "MS4wLjABAAAAtk0pVzYt82o_R5jUjN4FEpRlautyPFGSgioxrH-jfvg"

# 下面填寫你自己的cookies和token
cookies = "你自己的cookies"
token = "你自己的token"

# 構造請求的url
url= "https://api.amemv.com/aweme/v1/user/follower/list/?" \
          "user_id={}" \
          "&max_time={}" \
          "&count=20&offset=0&source_type=1&address_book_access=2&gps_access=2" \
          "&ts={}" \
          "&js_sdk_version=1.16.3.5&app_type=normal&manifest_version_code=630" \
          "&_rticket={}" \
          "&ac=wifi&device_id=47012747444&iid=1846815477740845" \
          "&os_version=8.0.0&channel=wandoujia_aweme1&version_code=630" \
          "&device_type=HUAWEI%20NXT-AL10&language=zh&resolution=1080*1812&openudid=b202a24eb8c1538a" \
          "&update_version_code=6302&app_name=aweme&version_name=6.3.0&os_api=26&device_brand=HUAWEI&ssmix=a" \
          "&device_platform=android&dpi=480&aid=1128" \
          "&sec_user_id={}".format(user_id, max_time, ts, _rticket, sec_user_id)
# 發起請求獲取X-Gorgon
headers = {
        "dou-url": url,  # 填寫對應的請求的api
        "dou-cookies": cookies,  # 填寫你的cookies
        "dou-token": token,  # 填寫你的token
        "dou-queries": ""  # 填寫你的請求的queries(沒有的話,就填空置:“”)
    }
    res = requests.get("http://8.131.59.252:8080", headers=headers)
    if res.status_code==200:
        res_gorgon = json.loads(res.text)
        if res_gorgon.get("status") == 0:
            gorgon = res_gorgon.get("X-gorgon")
        else:
            print("param error when get gorgon")
            return
    else:
        print("request error when get gorgon")
        return
    print("gorgon: " + gorgon)  # 這就是你的gorgon了
  • 通過獲取的X-Gorgon發起請求獲取響應數據,即用戶的關注列表:
# 重新構造請求頭:
headers = {
        "Host": "api.amemv.com",
        "Connection": "keep-alive",
        "Cookie": cookies, # 你自己的Cookies
        "Accept-Encoding": "gzip",
        "X-SS-REQ-TICKET": _rticket, # 當前時間戳,上面的代碼片已經生成了
        "X-Tt-Token": "0095a45e5cc.....c42c97e37d7350",  # 你自己的token
        "sdk-version": "1",
        "User-Agent": "你自己的user-agent", 
        "X-Khronos": ts, # 當前時間戳,上面的代碼片已經生成了
        "X-Gorgon": gorgon # X-gorgon,上面的代碼片已經生成了
    }

# 發起請求
result = doGetGzip(url, headers) # 這是我自己寫的函數,在下面的代碼片中
print(result)
  • doGetGzip 函數
def doGetGzip(url, headers):

    req = request.Request(url)

    for key in headers:
        req.add_header(key, headers[key])
    with request.urlopen(req) as f:
        data = f.read()
        return gzip.decompress(data).decode()

2. 分析響應數據獲取用戶數據

2.1. 響應數據格式:

響應的數據的格式是json的,所以一般我們都將響應的數據轉換成json進行處理,通過fiddle抓包我們可以看到響應數據主要包括下面幾個部分,而關注的用戶的信息都在“followers”里面。其他的字段主要用於翻頁,因為一次請求只返回20條數據,響應數據的其他字段:has_more 表示的是是不是有更的數據,max_time就是下一頁數據的游標,我們主要關注follower里的數據。
在這里插入圖片描述
下面我們可以看到followers里面有20條數據,每一條數據里面就是一個用戶的信息
在這里插入圖片描述
下面就是具體的每一個用戶的字段:
在這里插入圖片描述
用戶字段有很多,大多數對我來說都沒有用,我只關注user_id 和 對應的 sec_uid,當然如果可以看自己的需求獲取更多的數據,從上圖我們發現我們可以獲取到,因此我的目的就達到了,這樣我就可以把它們存下來,下面再通過它倆請求這個用戶關注的用戶的這兩個信息,下一篇文章我將主要介紹一下如何爬取視頻信息。

以上就是獲取抖音用戶的全部內容了,后面我會具體講解怎么抓取視頻數據等,碼字不易,還請點贊關注,有任何問題請留言,或者關注下方微信公眾號獲取抖音安裝包以及Fiddle安裝包等。

last but not least

任何問題,或者想要獲取對應的抖音APK抓包軟件或者相關代碼,可以關注下方公眾號留言,我會及時傾盡所有問您解答
公眾號是:kedalongkeai

last and least

如果文章對你有用並且恰好您也手頭富裕,可以考慮捐贈一毛錢,我可以升級服務器。
嘻嘻嘻


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM