日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python 手机App数据抓取实战二抖音用户的抓取

發布時間:2023/12/13 综合教程 58 生活家
生活随笔 收集整理的這篇文章主要介紹了 python 手机App数据抓取实战二抖音用户的抓取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

什么?你問我國慶七天假期干了什么?說出來你可能不信,我爬取了cxk坤坤的抖音粉絲數據,我也不知道我為什么這么無聊。

本文主要記錄如何使用appium自動化工具實現抖音App模擬滑動,然后分析數據得到粉絲用戶信息。


環境準備

fiddler
appium
mitmproxy(mitmdump)
python3.6
自帶root的安卓虛擬機
Android SDK

安卓模擬器需要安裝xposed框架并安裝JustTrustMe組件,因為抖音會有ssl驗證,會導致我們在將數據發送到我們的抓包工具的時候無法聯網,所以需要安裝這個組件來關閉ssl驗證

mitmproxy、AndroidSDK需要加入環境變量,這步就不再敘述


項目準備

首先我們需要給虛擬機安裝fiddler、mitmproxy的證書

1)fiddler 主要設置如下

端口設置可以隨意更改,本文設置為8889

電腦主機打開命令行 輸入ipconfig查看本機IP

設置模擬器的代理

接下來打開瀏覽器,輸入 ip:prot 如本機為 117.90.211.134:8889 下載安裝fiddler證書 如下步驟

接下來我們就可以使用fiddler正確的抓取手機數據包了

2)mitmproxy證書

我們在Windows系統上常用的是mitmproxy的mitmdump 打開cmd輸入mitmdump -p 端口號 就可以啟動服務

為了方便我們將端口號也設置為8889 但是開啟這個的時候需要先關閉fiddler 不然會端口沖突,然后打開模擬器的瀏覽器看看能否接受數據

我們發現出問題了,發現現在直接提示空的響應而不是證書的問題,看到mitmdump報的錯誤是killed by block_global 是什么原因呢?

這是mitmdump的自我保護措施,它防止全球網絡的連接,意思就是如果是本地局域網它不會阻攔,那該怎么辦呢?

有兩種解決辦法:第一種,將模擬器的網絡連接設置為橋接模式,這樣就不會出現問題;

第二種辦法是啟動的時候加入參數mitmdump -p 8889 --set block_global=false如下圖

接下來 安裝mitmproxy的證書 瀏覽器輸入網址 mitm.it 然后安裝證書

現在再打開網頁就不會出現證書的提醒了

這時候我們需要用的主要兩個抓包工具的證書就安裝完成了,需要注意的是我們每次測試都可能需要重新安裝證書,因為我們的主機IP可能會變


App分析

首先呢我們先確認模擬器中的xposed框架的JustTrustMe組件是否開啟 不然我們抖音App不能正常訪問網絡

注意以下步驟只能在網絡橋接模式下使用(或者使用真機與電腦在同一個網絡) 否則fiddler無法抓取到所有的包

首先使用fiddler分析,打開fiddler 并打開抖音進行操作本項目是爬取cxk坤坤的粉絲數據,所以我們先進入他的抖音主頁點進粉絲列表

粉絲好多,我們接下來向下滑動,看看當向下滑動刷新出更多粉絲的時候 fiddler會抓取到什么數據

會發現每次向下滑動的時候都會有一個含有aweme/v1/user/follower/list/ 的網址,我們懷疑這就是粉絲數據的接口 我們把這個網址返回來的數據放入 json.cn 看看

還真的就是粉絲數據,會發現每次滑動更新的是二十個粉絲,所以我們就找對了方向,下面我們來分析這個請求

GET https://aweme-hl.snssdk.com/aweme/v1/user/follower/list/?user_id=103313639528&sec_user_id=MS4wLjABAAAAxj2Cuu75g3I2pGOs7jtw5XN6WMiCKbA-jfIjlONRRvM&max_time=1570336550&count=20&offset=0&source_type=1&address_book_access=1&gps_access=1&openudid=3ca06768d1f58615&version_name=8.1.1&ts=1570336895&device_type=OPPO%20R11&ssmix=a&iid=87664447665&app_type=normal&os_api=19&mcc_mnc=46007&device_id=68799320259&resolution=720*1280&device_brand=OPPO&aid=1128&manifest_version_code=811&app_name=aweme&_rticket=1570336895512&os_version=4.4.2&device_platform=android&version_code=811&update_version_code=8112&ac=wifi&dpi=240&uuid=866174010601603&language=zh&channel=tengxun_new HTTP/1.1

我們會發現這個請求的url帶有很多很多的參數,沒錯,這是抖音自身的加密方法,要破解這個可得好一會了,所以我們無法使用requests直接構造請求來獲得數據了,那我們該如何獲取數據呢?

沒錯就是使用mitmdump,mitmdump有個最大的好處就是可以與python文件交互,我們可以直接使用python寫好命令,使用mitmdump抓包,我們手動的滑動就可以解析出數據了

編寫douyin_mitmdump.py文件 代碼如下:

import json

#函數名必須這樣寫 這是mitmdump規則
def response(flow):
    #下面這個網址是通過fiddler獲取到的 但是有些數據我們無法解密,所以需要用mitmdump捕獲數據包然后做分析
    if 'aweme-hl.snssdk.com/aweme/v1/user/follower/list' in flow.request.url:
        for user in json.loads(flow.response.text)['followers']:
            user_info={}
            user_info['nickname'] = user['nickname']
            user_info['share_id'] = user['uid']
            user_info['douyin_id'] = user['short_id']
            #有的用戶修改了抖音號
            if user_info['douyin_id'] == '0':
                user_info['douyin_id'] = user['unique_id']
            print(user_info)

現在打開cmd并切換到項目目錄下 執行命令 mitmdump -p 8889 -s douyin_mitmdump.py

接下來手動滑動界面看看會不會解析數據

好的 現在我們已經成功的分析出來了粉絲數據,但是我們總不能一直鼠標滑動吧?所以我們現在需要使用Appium進行自動化測試模擬滑動


Appium自動化測試模擬滑動

配置信息

Appium是一個開源測試自動化框架,可用于原生,混合和移動Web應用程序測試。 它使用WebDriver協議驅動iOS,Android和Windows應用程序。

比如本文我們就使用appium來實現從點開程序到模擬滑動的全部操作。

首先我們需要在電腦上安裝Appium

這個相當于appium服務端,我們在執行自動化測試的時候需要先在電腦上打開服務端,然后我們使用程序連接虛擬機或真機執行腳本進行自動化測試點擊start server打開服務端

我們首先使用appium 自帶的測試程序來試一下如何操作 點擊右上角的放大鏡符號

進入配置選項界面 開始填寫選項信息

下面我來解釋每個參數都是如何得到的

1)platformName 這是平臺名稱 我們填寫 Andriod 相信不用過多解釋

2)platformVersion 這是問平臺版本信息,根據各個手機不同自主填寫,本文使用的是 Andriod4.4.2

3)deviceName 這個是設備的名稱,我們如何獲取呢?

  這個時候就用到了我們AndroidSDK中的adb工具了 adb是用來連接電腦與手機的工具 我們把手機進入開發者選項并打開允許USB調試,然后打開命令行輸入命令 adb devices看看有沒有輸出

  

  返回的127.0.0.1:52001就是設備名稱 這個是模擬器的名稱,使用真機會不同 (如果沒有返回就關閉開發者模式重新打開USB調試多試幾次)

4)appPackage、appActivity這倆個參數非常重要,它指定了我們自動化測試的app,這兩個參數獲取有點麻煩,下面詳解如何獲取

  首先手機打開App,本文就是抖音了,然后電腦命令行輸入 adb shell 進入交互界面 然后輸入命令dumpsys activity | grep mFocusedActivity

  

  第一個就是包名,第二個就是activity名 我們記下來一會編寫進去(activity名稱前要跟著包名)

  即 包名com.ss.android.ugc.aweme activity名com.ss.android.ugc.aweme.main.MainActivity

5)noReset unicodekeyboard resetkeyboard解釋會在一會的程序中

然后點擊右下方保存配置信息并start session 如果點擊start session發現手機自動打開抖音時,就說明我們的配置信息寫對了,就可以開始使用了

這些配置信息一會要在我們的python腳本中使用,所以一定要填寫正確


內容分析

其實app自動化測試跟網頁爬蟲很相似,首先分析我們該怎么做

點開抖音這一步已經不用我們去做 然后我們需要依次點左上角放大鏡按鈕、點擊搜索框輸入抖音號、點擊搜索、點擊用戶、點擊進入主頁、點擊粉絲、向上滑動

我們該如何定位按鈕以及輸入信息呢?

這又得使用AndroidSDK中的工具了 這次使用 AndroidSDK oolsmonitor.bat 中的monitor 可能有的小伙伴會問 為什么不使用可以查看xpath的魔改版的uiautomatorviewer呢?這是因為我在測試的時候發現現在抖音加入了某種時鐘,我們都知道uiautomatorviewer無法獲取動態頁面的數據,而我發現monitor有的界面卻可以,所以使用monitor,下面開始

首先用鼠標點擊左邊畫藍色圈的地方獲取當前手機界面數據,然后鼠標點擊我們需要的控件,之后右邊出現的就是我們需要的信息,我們可以通過resource-id查找指定數據

現在先來編寫douyin_appium.py文件測試下能否自動打開抖音并點擊左上方放大鏡按鈕

from appium import webdriver
#WebDriverWait用來加入時間判斷,有時候控件元素需要過一段時間才會出現
from selenium.webdriver.support.ui import WebDriverWait
import time

#配置信息
option={
    "platformName": "Android",
    "platformVersion": "4.4.2",
    "deviceName": "127.0.0.1:52001",
    #自動化測試包名
    "appPackage": "com.ss.android.ugc.aweme",
    #自動化測試Activity
    "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
    #再次啟動不需要再次安裝
    "noReset": True,
    #unicode鍵盤 我們可以輸入中文
    "unicodekeyboard": True,
    #操作之后還原回原先的輸入法
    "resetkeyboard":True
}

#其中的4723就是appium服務啟動時的端口號
driver = webdriver.Remote("http://localhost:4723/wd/hub",option)

#放大鏡按鈕
try:
    #使用resource-id查找按鈕
    if WebDriverWait(driver,5).until(lambda x:x.find_element_by_id('com.ss.android.ugc.aweme:id/b3o')):
        #點擊按鈕
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/b3o').click()
except:
    pass

運行之前首先要開啟 appium 服務端,即start server

然后運行python文件

好的我們發現已經可以自動的點擊放大鏡按鈕了,那么接下來只需要繼續編寫文件即可以完成自動化操作了 代碼如下

from appium import webdriver
#WebDriverWait用來加入時間判斷,有時候控件元素需要過一段時間才會出現
from selenium.webdriver.support.ui import WebDriverWait
import time

#配置信息
option={
    "platformName": "Android",
    "platformVersion": "4.4.2",
    "deviceName": "127.0.0.1:52001",
    #自動化測試包名
    "appPackage": "com.ss.android.ugc.aweme",
    #自動化測試Activity
    "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
    #再次啟動不需要再次安裝
    "noReset": True,
    #unicode鍵盤 我們可以輸入中文
    "unicodekeyboard": True,
    #操作之后還原回原先的輸入法
    "resetkeyboard":True
}

#其中的4723就是appium服務啟動時的端口號
driver = webdriver.Remote("http://localhost:4723/wd/hub",option)

#放大鏡按鈕
try:
    #使用resource-id查找按鈕
    if WebDriverWait(driver,5).until(lambda x:x.find_element_by_id('com.ss.android.ugc.aweme:id/b3o')):
        #點擊按鈕
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/b3o').click()
except:
    pass

#得到窗口大小
def get_size():
    x=driver.get_window_size()['width']
    y=driver.get_window_size()['height']
    return (x,y)

#搜索框
try:
    # 定位搜索框
    if WebDriverWait(driver,3).until(lambda x:x.find_element_by_id('com.ss.android.ugc.aweme:id/ad1')):
        #點擊搜索框
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/ad1').click()
        #輸入抖音號并點解搜索
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/ad1').send_keys("1307311292")
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/dy8').click()
        #點擊用戶 注意寫法 這個控件由于無法獲取resource_id與xpath的值 所以只能通過text來查找
        driver.find_element_by_android_uiautomator("text("用戶")").click()
except:
    pass

#點進去具體界面
try:
    if WebDriverWait(driver,5).until(lambda x:x.find_element_by_id('com.ss.android.ugc.aweme:id/bck')):
        #進入用戶信息界面
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/bck').click()
        time.sleep(2)
        #點擊粉絲數
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/akf').click()
except:
    pass

#得到屏幕尺寸
size = get_size()
#定義滑動
x1 = int(size[0]*0.5)
x2 = int(size[0]*0.7)
y1 = int(size[1]*0.9)
y2 = int(size[1]*0.2)

while(True):
    time.sleep(0.5)
    #模擬滑動
    driver.swipe(x1, y1, x2, y2)

效果如下gif圖 可以實現從打開抖音到滑動的模擬操作


數據入庫

現在我們已經完成了appium的自動化模擬滑動,同時我們最開始又寫了獲取粉絲數據的mitmdump腳本,現在我們將這兩個腳本結合起來就可以實現自動分析數據了

第一步運行mitmdump腳本 即到項目目錄下運行命令

D:pythonworkAppSpidersdouyin_test>mitmdump -s douyin_mitmdump.py -p 8889 --set block_global=false

--set block_global=false如果手機和電腦在同一個局域網可以不加這條指令

然后將手機連接代理到我們主機 ,接著運行douyin_appium.py 現在就可以完成自動拉取粉絲數據了

效果如下圖

我們還差什么呢?我們總不能在命令行看粉絲數據吧,所以我們需要把抓取到的數據放入本地mongo數據庫,首先編寫一個douyin_db.py 代碼如下

import pymongo
from pymongo.collection import Collection

client = pymongo.MongoClient(host='127.0.0.1',port=27017)
#數據庫名
db = client['douyin_test']

#存入獲取的粉絲數據部分信息
def save_task(item):
    task_id_collection = Collection(db, 'task_id')
    #updata方法,如果存在相同的share_id就更新,不存在就構建
    task_id_collection.update({'share_id':item['share_id']},item,True)

然后我們在 douyin_mitmdump.py中引用這個剛剛編寫的入庫函數 douyin_mitmdump.py引用如下:

import json
#導入編寫的入庫函數
from douyin_test.douyin_db import save_task

#函數名必須這樣寫 這是mitmdump規則
def response(flow):
    #下面這個網址是通過fiddler獲取到的 但是有些數據我們無法解密,所以需要用mitmdump捕獲數據包然后做分析
    if 'aweme-hl.snssdk.com/aweme/v1/user/follower/list' in flow.request.url:
        for user in json.loads(flow.response.text)['followers']:
            user_info={}
            user_info['nickname'] = user['nickname']
            user_info['share_id'] = user['uid']
            user_info['douyin_id'] = user['short_id']
            #有的用戶修改了抖音號
            if user_info['douyin_id'] == '0':
                user_info['douyin_id'] = user['unique_id']
            #數據入庫
            save_task(user_info)

再次運行mitmdump命令與douyin_appium.py 現在就可以實現數據入庫了,結果如下

以上就是我們爬取到的cxk的粉絲數據,有小伙伴可能會說這種模擬滑動的很慢,可是有些app做了很高級別的加密,我們迫不得已只能用這種方式爬取,本次教程到此結束

喜歡的覺得有用的就點個贊吧,點波關注不迷路呦

總結

以上是生活随笔為你收集整理的python 手机App数据抓取实战二抖音用户的抓取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美另类图片 | 色婷婷亚洲一区二区三区 | 国产又粗又猛又爽69xx | 欧美一二三区视频 | 69精品一区二区 | 国产一极毛片 | 国产一级免费观看 | 亚洲中文字幕无码不卡电影 | 久久久穴| 91超碰国产在线 | 亚洲天堂色 | 操操操操操操操操操 | 光棍影院一区二区 | 波多野结衣国产在线 | 麻豆蜜桃wwww精品无码 | 亚洲伦理在线观看 | 加勒比波多野结衣 | 日韩在线观看免费网站 | 中文字幕高清一区 | 国产福利一区二区三区在线观看 | 樱桃香蕉视频 | 免费在线观看a级片 | 美女免费黄色 | 亚洲欧美高清 | 中文字幕第二区 | 久草国产精品 | 国产精品无码久久久久久 | 欧美韩一区二区 | 免费国产黄色网址 | 久久综合九色综合欧美狠狠 | av在线成人 | 黄色小说在线免费观看 | 国产精品成| 日日射射 | aise爱色av| 久久久资源网 | 先锋资源av在线 | 成人午夜免费网站 | 免费国产一区二区 | 国产第八页| 日本xx视频| 蜜桃麻豆视频 | 麻豆免费观看网站 | 99一级片 | 超级黄色片 | 夜晚福利| 成人在线观看黄色 | 青草草在线视频 | 国产113页| 久久午夜精品 | 久草av在线播放 | 国产高清免费在线 | 亚洲一区精品视频 | 欧美视频在线观看 | 欧美一区在线视频 | mm131在线 | 肉嫁高柳家 高清 | 欧美人与动牲交xxxxbbbb | 一级片日韩 | 97热视频| 午夜在线精品偷拍 | 4388成人网 | 日韩av在线免费播放 | 久久一视频 | 亚欧成人| 另类综合网| 午夜免费播放观看在线视频 | 日韩激情成人 | 久久综合久色欧美综合狠狠 | 日本妈妈9 | 欧美午夜一区二区三区 | 国产精品美女久久久久图片 | 看av免费毛片手机播放 | 白丝久久| 成人免费视频一区二区 | 国产精品va | 狠狠干2024| 日韩三级久久 | 少妇熟女高潮流白浆 | 在线视频三区 | 九九精品在线观看 | 欧美一级免费视频 | 久久大胆视频 | 日本一道在线 | 狠狠爱亚洲 | 亚欧精品视频一区二区三区 | 人人插人人干 | 国产精品无码一区二区无人区多人 | 日韩av手机在线 | www.youjizz日本 | 一区二区久久精品66国产精品 | 亚洲av日韩av高潮潮喷无码 | 午夜精品免费观看 | 免费成人蒂法网站 | 级毛片| mm1313亚洲国产精品无码试看 | www.浪潮av.com | 亚洲小说专区 | 男人女人拔萝卜视频 |