2021-05-10

抖音app的环境部署概述

现在app的加密反爬越来越厉害,我们可以使用模拟点击,操作手,然后用mitmdump拦截,能解决60%的爬虫,再加普通的requests请求,抓包工具,可以解决90%app的爬虫,但是效率不高
一、搭建环境(python3.7+windows+appium + weditor + mitmdump +夜神+安卓5.1.11、 下载sdk,安装,配置好环境,最好去下载android-studio-ide-183.5522156-windows,从ide里面安装sdk很方便
2、下载安卓模拟器,并安装完成后,然后将模拟器中的adb.exe和nox_adb.exe替换成sdk中的adb.exe,最后adb version测试一下
3.安装nodjs,配置好环境,node -v测试一下
4、安装appium,最好去github上取下载安装包安装,解压安装,这种方法省去很多麻烦,是最简单的
5、安装appium-python-client,命令安装即可
5、安装mitmproxy,命令安装,对请求和响应进行拦截,最牛的的是可以执行python脚本
6、在模拟器上安装justrustMe.apk和xposed,可以解决证书信任问题
7、安装 uiautomator2和weditor,命令安装,可以准确的定位元素,用起来真的很爽
8、在谷歌浏览器上安装SwitchyOmega_Chromium,配置好本地代理及端口号127.0.0.1:8889
9、安装fiddler,配置好

二、配置模拟器中的环境
配置模拟器上的手机环境
1.0、打开模拟器,创建一个安卓5.1.1版本手机,开启桥接模式
1.1、开启本地代理,在cmd 运行mitmdump -p 8889
1.2、安装mitmproxy的证书,打开浏览器,访问mitm.it,安装安卓证书,起个名字,设个密码

、配置抓包
2.0、 在fiddler上配置好,代理ip,端口号8889,开启远程访问
2.1 、开启模拟器手机,在手机的浏览器中,访问ip:8889,安装fiddler证书


三、windows安装docker
 下载地址:https://store.docker.com/editions/community/docker-ce-desktop-windows
 1、创建dockerfile
 2、打包镜像
 3、运行镜像
 4、多任务部署
可实现多任务抓取


四、接下来项目示范,抓取抖音app粉丝数据

步骤:
1、启动appium服务
2、打开夜神模拟器,安装好抖音app
3、mitmdump -s test.py -p 8889
*test.py代码如下*

import json
import csv

def response(flow):
    with open('data.csv', 'a', encoding='utf-8', newline='') as fp:
        header = ['unique_id', 'uid', 'nickname']
        wr = csv.DictWriter(fp, fieldnames=header)
        #wr.writeheader()

        if 'aweme/v1/user/follower/list' in flow.request.url:
            dic_data = json.loads(flow.response.text)

            for user in dic_data['followers']:
                douyin_info = {}
                douyin_info['unique_id'] = user['unique_id'] if user['unique_id'] else None
                douyin_info['uid'] = user['uid'] if user['uid'] else None
                douyin_info['nickname'] = user['nickname'] if user['nickname'] else None
                print(douyin_info)

                # 同时写入多行
                try:
                    wr.writerow(douyin_info)
                except Exception as e:
                    print(e)



4、启动模拟点击的脚本(app_click.py)如下:
from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time
import random

cap = {
    "platformName": "Android",  # 平台名称
    "platformVersion": "5.1.1",  # 平台版本
    "deviceName": "127.0.0.1:62001",  # 设备名称
    "appPackage": "com.ss.android.ugc.aweme",  # 包名
    "appActivity": ".splash.SplashActivity",  # 激活
    "noReset": True,  # 记录操作
    "unicodekeyboard": True  # 允许写汉字
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', cap)
driver_wait = WebDriverWait(driver, 10, 1)
driver.implicitly_wait(10)
time.sleep(10)


def get_size():
    x = driver.get_window_size()['width']  # 获取屏幕宽度
    y = driver.get_window_size()['height']
    return (x, y)


# 点击搜索
if driver_wait.until(lambda x: x.find_element_by_xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/d6z"]')):
    driver.find_element_by_xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/d6z"]').click()
time.sleep(2)

# 输入关键字


if driver_wait.until(lambda x: x.find_element_by_xpath('//*[@text="李晨"]')):
    driver.find_element_by_xpath('//*[@text="李晨"]').click()
time.sleep(3)

# 选择李晨的大图像
if driver_wait.until(lambda x: x.find_element_by_xpath(
        '//*[@resource-id="com.ss.android.ugc.aweme:id/aal"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[2]/android.view.View[1]/android.widget.ImageView[1]'
)):
    driver.find_element_by_xpath(
        '//*[@resource-id="com.ss.android.ugc.aweme:id/aal"]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[2]/android.view.View[1]/android.widget.ImageView[1]').click()
time.sleep(2)

# 点击粉丝
if driver_wait.until(lambda x: x.find_element_by_xpath(
        '//*[@resource-id="com.ss.android.ugc.aweme:id/c_m"]'
)):
    driver.find_element_by_xpath(
        '//*[@resource-id="com.ss.android.ugc.aweme:id/c_m"]').click()

d = get_size()
x1 = int(d[0] * 0.5)  # 鼠标,开始的停的位置
x2 = int(d[0] * 0.5)  # 滑轮,从哪里开始滑动
y1 = int(d[1] * 0.75)  # 滑轮,从哪里滑动结束
y2 = int(d[1] * 0.25)  # 鼠标,从哪里停止

while True:
    driver.swipe(x1, y1, x2, y2)  # 循环的执行滑动
    time.sleep(random.randint(1, 4))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值