微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

抖音抓取尝试

使用Appium抓取抖音粉丝信息

 

前言

1. 环境的准备

  1. 夜神模拟器(Android 5.1.1
  2. filder
  3. mitmproxy
  4. python3.7.3
  5. jdk1.8.0_251
  6. Android StudioAndroid SDK 5.1
  7. xposed(Android 5.1
  8. JustTrustMe

这里先说明一下,抖音有ssl验证,夜神模拟器安装xposed和JustTrustMe之后,才能正常抓包,不然打开抖音是没有网的。

2. 环境配置

除了python3.7.3和mitmproxy,其余的资源都在百度网盘中,自取,地址:https://pan.baidu.com/s/1ZtvZIQvQ8A6rp02HtAOudQ,提取码:4mu1。

2.1 filder配置

安装好filder后,打开filder,左上角Tools -> Options,设置如下:

在这里插入图片描述

在这里插入图片描述

点击Actions,选择Trust Root Certificate,然后全部选是,安装window端的证书

在这里插入图片描述

到这一步filder,PC端的算是配好了,然后关闭域防火墙,获取PC端的ip地址,方法如下:

在这里插入图片描述

然后打开夜神模拟器,进入wifi,配置代理:

在这里插入图片描述


然后打开网页进入192.168.1.19:8888,下载证书,

在这里插入图片描述


下载完成了,进入设置 -> 安全 -> 从SD卡安装,安装刚刚下载的证书,随便取名,

在这里插入图片描述


到处,filder就可以抓到夜神模拟器上的数据包了,而要抓抖音的包得安装xposed和JustTrustMe。

2.2 xposed和JustTrustMe的配置

在网盘中下好xposed和JustTrustMe的apk文件后,直接点夜神右侧的安装APK,找到这两个框架的apk文件,点击安装,这里有个先后顺序,先安装xposed,安装后夜神桌面有一个xposed install,打开,然后下载xposed,

在这里插入图片描述


下载后会显示Xposed框架89版已激活,然后安装JustTrustMe的apk,安装好后,在xposed install里面勾选JustTrustMe,

在这里插入图片描述


到这里就安装完成了,然后下载最新版的抖音,就可以用filder抓包了:

在这里插入图片描述


记下这个url的前半部分,等会有用的。

2.3 mitmproxy配置

首先,在PC端通过pip install mitmproxy安装mitmproxy模块,安装好后,继续通过cmd,输入mitmproxy,这样就会在系统盘的用户目录下的.mitmproxy文件夹下生成许多证书,点击mitmproxy-ca-cert.p12,选本地计算机,直接点下一步,设置密码的位置不用填,直接下一步,证书照下图放:

在这里插入图片描述


这样PC端的证书就配好了,然后配夜神的,将mitmproxy-ca-cert.pem直接拖到夜神模拟器中,还是按照上面安装filder夜神模拟器端的证书方法操作,安装证书,然后创建douyin_fans.py文件

import json


def response(flow):
    if 'api3-normal-c-hl.amemv.com/aweme/v1/user/follower/list' in flow.request.url:
        for user in json.loads(flow.response.text)['followers']:
            user_info = dict()
            user_info['nickname'] = user['nickname']
            user_info['share_id'] = user['uid']
            user_info['douyin_id'] = user['short_id']
            user_info['sec_uid'] = user['sec_uid']
            if user_info['douyin_id'] == '0':
                user_info['douyin_id'] = user['unique_id']
                user_info['update_time'] = user['unique_id_modify_time']
            print(user_info)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

然后配置夜神的wifi的代理,同样的8888端口和ip,关掉域防火墙,然后在douyin_fans.py文件目录打开命令行输入mitmdump -p 8888 -s douyin_fans.py,然后打开夜神上的抖音进入到粉丝里面,就可以看到命令行有输出了,如下图:

在这里插入图片描述


到此处,mitmproxy已经配置好了,而且可以抓到粉丝了,但是需要手动滑粉丝列表才能进行翻页,这里就需要使用Appium进行自动滑动粉丝列表了。

2.4 配置Android Studio

这里先解释一下为什么要下载Android Studio,主要是夜神模拟器是Android系统,而用Appium控制Android系统就需要Android的SDK,而现在的Android SDK与Android Studio是绑定的,安装好Android Studio后,按下图操作:

在这里插入图片描述


进入SDK Manager,安装Android5.1,并记住skd所在的路径:

在这里插入图片描述


安装好SDK后,进入对应的路径,然后打开系统的环境变量配置ANDROID_HOME以及一些path:

在这里插入图片描述


在这里插入图片描述


然后将platform-tools下的adb.exe文件放到夜神模拟器的bin目录中,与nox_adb.exe文件替换,并改为相同的名称nox_adb.exe,到此Android SDK的环境全部配完。

JDK的配置

安装好jdk后,在系统变量中配置JAVA_HOME,以及在path中添加jdk的bin路径,jdk的环境就配好了。

配置Appium

安装好Appium后直接打开,启动服务:

在这里插入图片描述


然后点击放大镜,然后按图配置如下参数:

在这里插入图片描述


然后save,然后start session,这样夜神就会自动打开抖音,到此所有环境配置完毕,下面开始页面元素定位以及爬取的相关工作。

3. 定位页面元素

打开cmd输入monitor,等会就会出现一个界面,然后打开夜神的抖音,进行如下操作:

在这里插入图片描述


从左到右依次操作,这样就可以得到页面元素放大镜的id,后面的账号搜索点击元素都用同样的方法一步一步的得到所有元素的id值,编写douyin_appium.py文件

from appium import webdriver
from selenium.webdriver.support.ui import webdriverwait
import time


option = {
    "platformName": "Android",
    "platformVersion": "Andriod5.1.1",
    "deviceName": "127.0.0.1:62001",
    "appPackage": "com.ss.android.ugc.aweme",
    "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
    "noreset": True,
    "unicodekeyboard": True,
    "resetkeyboard": True,
    "automationName": "UiAutomator1"
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', option)

try:
    if webdriverwait(driver, 5).until(lambda x: x.find_element_by_id('com.ss.android.ugc.aweme:id/c63')):
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/c63').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/ai4')):
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/ai4').click()
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/ai4').send_keys('lv123052')
        if webdriverwait(driver, 3).until(lambda x: x.find_element_by_id('com.ss.android.ugc.aweme:id/ghv')):
            driver.find_element_by_id('com.ss.android.ugc.aweme:id/ghv').click()
    if webdriverwait(driver, 2).until(lambda x: x.find_element_by_id('android:id/text1')):
        driver.find_element_by_id('android:id/text1').click()
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/ckr').click()
except:
    pass

try:
    if webdriverwait(driver, 5).until(lambda x:x.find_element_by_id('com.ss.android.ugc.aweme:id/bce')):
        driver.find_element_by_id('com.ss.android.ugc.aweme:id/bce').click()
        time.sleep(2)
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

4. 运行项目

夜神的代理打开,域防火墙关掉,然后用mitmdump命令运行douyin_fans.py文件,这里得说明一下,mongdb数据库的操作在douyin_fans.py文件中自行添加,然后直接run,douyin_appium.py文件,这样就会自行爬取抖音的某账号粉丝信息,效果如图:

在这里插入图片描述


出于用户隐私保密,这里就将相关id打马赛克了,到此整个项目全部结束,如果您觉得不错的给个赞谢谢,创作不易呀。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐