抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息

抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息

项目目录
1、抖音短视频数据抓取实战系列(〇)——前言
2、抖音短视频数据抓取实战系列(一)——模拟器的选择与设置
3、抖音短视频数据抓取实战系列(二)——Fiddler安装配置以及模拟器监测环境配置
4、抖音短视频数据抓取实战系列(三)——Fiddler抓取抖音用户详细信息数据
5、抖音短视频数据抓取实战系列(四)——Java解析Json文件数据并存库
6、抖音短视频数据抓取实战系列(五)——Mitmproxy的安装以及模拟器Mitmproxy证书安装
7、抖音短视频数据抓取实战系列(六)——Mitmproxy+python编写监测程序
8、抖音短视频数据抓取实战系列(七)——python连接MySQL数据库
9、抖音短视频数据抓取实战系列(八)——Mitmproxy抓取用户详细信息并入库
10、抖音短视频数据抓取实战系列(九)——自动化Appium的环境与参数配置
11、抖音短视频数据抓取实战系列(十)——获取抖音dom元素属性
12、抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息
13、抖音短视频数据抓取实战系列(十二)——抓取实战BUG总集


1、接下来我们将Appium联合Mitmproxy,进行简易的自动化抓取存储抖音用户信息操作。


2、自动化脚本:

from appium import webdriver
#WebDriverWait用来加入时间判断,有时候控件元素需要过一段时间才会出现
from selenium.webdriver.support.ui import WebDriverWait
import time

num=1

#配置信息
option={
  "platformName": "android",
  "platformVersion": "5.1.0",
  "deviceName": "emulator-5554",
    #自动化测试包名
  "appPackage": "com.ss.android.ugc.aweme",
    #自动化测试Activity

  "appActivity": "com.ss.android.ugc.aweme.splash.SplashActivity",
    #"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)

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

def getuser():
    global num
    size = get_size()
    time.sleep(1)
    try:#上划
        # 定义滑动
        x1 = int(size[0] * 0.5)
        x2 = int(size[0] * 0.7)
        y1 = int(size[1] * 0.9)
        y2 = int(size[1] * 0.2)
        # 模拟滑动
        time.sleep(1)
        driver.swipe(x1, y1, x2, y2)
        print("**第{0}次上划**".format(num))
    except:
        pass

    time.sleep(1)
    try:#左滑
        # 定义滑动
        x1 = int(size[0] * 0.9)
        x2 = int(size[0] * 0.3)
        y1 = int(size[1] * 0.5)
        y2 = int(size[1] * 0.5)
        # 模拟滑动
        time.sleep(1)
        driver.swipe(x1, y1, x2, y2)
        print("**第{0}次左滑**".format(num))
    except:
        pass

    # 点进去具体界面

    time.sleep(1)
    try:
        if WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id('com.ss.android.ugc.aweme:id/l6')):
            # 进入用户信息界面
            print("**抓取第{0}个用户数据**".format(num))
            time.sleep(1)
            driver.find_element_by_id('com.ss.android.ugc.aweme:id/l6').click()  # 返回
            # driver.find_element_by_id('com.ss.android.ugc.aweme:id/bgg').click()#头像
    except:
        pass


time.sleep(10)#延迟十秒运行,主要是博主这边比较卡
for num in range(1,1000):#设置执行测试
    print("————开始执行第{0}次".format(num))
    getuser()
    print("第{0}次执行完成————".format(num))

3、监听脚本:

import json
import pymysql
#函数名必须这样写 这是mitmdump规则
def response(flow):
    #下面这个网址是通过fiddler获取到的 但是有些数据我们无法解密,所以需要用mitmdump捕获数据包然后做分析\


    if 'aweme.snssdk.com/aweme/v1/user/profile/other/?' in flow.request.url:
        result=json.loads(flow.response.text)['user']
        print(" ")
        print(" ")
        print(" ")
        print(" ")
        print(" ")
        print("******************************************************************************")
        print(" ")
        
        user_info= {}
        
        if "nickname" in result:
            user_info["nickname"]=result["nickname"]
        else:
            user_info["nickname"]="伞梦"
            
        if "signature" in result:
            user_info["signature"]=result["signature"]
        else:
            user_info["signature"]="大家好。"
            
        if "uid" in result:
            user_info["uid"]=result["uid"]
        else:
            user_info["uid"]="-1"

        db = pymysql.connect("localhost", "root", "1234", "database", charset='utf8mb4')
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # SQL 插入语句
        sql = """INSERT INTO usertest(nickname,
                 uid, signature)
                 VALUES ('{0}', '{1}','{2}')""".format(user_info['nickname'], user_info['uid'],user_info['signature'])
        #user_info['nickname'], user_info['uid'],user_info['signature']
        try:
            # 执行sql语句
            cursor.execute(sql)
            print(sql)
            print("success")
            # 提交到数据库执行
            db.commit()
        except Exception as e:
            print("error")
            # Rollback in case there is any error
            print(e)
            db.rollback()
        # 关闭数据库连接
        db.close()


        #有的用户修改了抖音号
        print(user_info)
        print(" ")
        print("******************************************************************************")
        print(" ")
        print(" ")
        print(" ")
        print(" ")
        print(" ")

4、开启Appium服务。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020122111431126.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2Mjg4NTU5,size_16,color_FFFFFF,t_70)
5、mitmdump -p 8900 --set block_global=false  -s teacher.py开启Mitmproxy监听服务,附带监听脚本,在监听脚本父级运行。
```python
mitmdump -p 8900 --set block_global=false  -s teacher.py

抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第1张图片
6、运行自动化脚本。
抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第2张图片
7、自动化抓取过程中。
抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第3张图片
8、这是程序运行一段时间,抓取的抖音用户数据。
抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第4张图片
抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第5张图片
抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息_第6张图片
9、Appium与Mitmproxy联合自动取存抖音用户信息成功。


项目目录
1、抖音短视频数据抓取实战系列(〇)——前言
2、抖音短视频数据抓取实战系列(一)——模拟器的选择与设置
3、抖音短视频数据抓取实战系列(二)——Fiddler安装配置以及模拟器监测环境配置
4、抖音短视频数据抓取实战系列(三)——Fiddler抓取抖音用户详细信息数据
5、抖音短视频数据抓取实战系列(四)——Java解析Json文件数据并存库
6、抖音短视频数据抓取实战系列(五)——Mitmproxy的安装以及模拟器Mitmproxy证书安装
7、抖音短视频数据抓取实战系列(六)——Mitmproxy+python编写监测程序
8、抖音短视频数据抓取实战系列(七)——python连接MySQL数据库
9、抖音短视频数据抓取实战系列(八)——Mitmproxy抓取用户详细信息并入库
10、抖音短视频数据抓取实战系列(九)——自动化Appium的环境与参数配置
11、抖音短视频数据抓取实战系列(十)——获取抖音dom元素属性
12、抖音短视频数据抓取实战系列(十一)——Appium与Mitmproxy联合-自动取存抖音用户信息
13、抖音短视频数据抓取实战系列(十二)——抓取实战BUG总集



至此,抖音短视频数据抓取实战系列已经结束,感谢大家的阅读,学习与支持,如在学习过程中存在什么疑问,欢迎大家前来交流~~
——————谢谢——————

你可能感兴趣的:(自动化,数据抓取,java,python,爬虫,数据库)