Docker如何实现多任务端app应用数据抓取系统

一、任务

  • 将编写好的爬虫代码部署到docker环境中,启动3台安卓模拟器(夜神模拟器为例),通过python多进程/多线程分别抓取抖音、快手和今日头条3款app中的数据,然后通过mitmproxy抓包工具解析数据,存入mongodb数据库中

二、搭建步骤

  • Docker中下载mongo、appium/appium、450120127/pythonv2(包含python环境以及mitmproxy环境)镜像

    docker pull mongo
    docker pull appium/appium
    docker pull 450120127/pythonv2
  • 上传python脚本到docker中

    • 设置docker toolbox共享文件夹

      • windows环境下,打开docker虚拟机(Oracle VM VirtualBox),点击设置---共享文件夹---添加共享文件夹---添上共享文件夹路径、共享文件夹名称(自定义比如handle_docker)--勾选固定分配
    • 设置docker toolbox网卡状态为桥接

      • 打开docker虚拟机(Oracle VM VirtualBox),点击设置--网络--网卡1--连接方式--桥接网卡
      • 如果更改为桥接后,虚拟机无法启动,解决办法:
        • 1、升级virtualbox
        • 2、安装驱动
          • 打开网络和共享中心--更改适配器设置--点击上述选择的网卡(比如wlan)--点击属性--网络选项下点击安装--选择<服务>--添加--从磁盘安装--选择virtualbox虚拟机的安装目录下的drivers--network--netlwf下的驱动文件VBoxNetLwf.inf并选择打开,然后点击确定就可以安装上
      • 查看虚拟机ip
        • 点击虚拟机中的--显示
        • 然后在命令行中输入ifconfig | more
    • 将共享文件夹挂载到虚拟机中

      • docker虚拟机中创建一个目录(比如文件夹名docker),用于挂载共享文件夹
        mkdir docker

        pwd后查看该文件夹的路径为:/home/docker/docker

      • 挂载文件夹
        sudo mount -t vboxsf handle_docker /home/docker/docker

        语法:sudo mount -t 【指定文件格式】【 共享文件夹名称】【虚拟机中的挂载路径】,注意不要在挂载文件夹下进行该操作

      • 查看虚拟机中所有挂载的文件夹
        mount
      • 如何取消挂载
        sudo umount /home/docker/docker

        umount后面是虚拟机中的挂载路径

    • 如何修改脚本内容

      • 在本地文件夹修改即可,因为是共享文件夹,所以本地修改以后,docker虚拟机以及容器中的脚本都会相应变化
  • 创建相应容器,并将docker虚拟机中的文件映射到容器中

    • 创建带python环境的容器

      docker run -it -v /home/docker/docker:/root/ --name python -p 450120127/pythonv2 bash

      -v参数后面指定虚拟机和docker容器中的文件路径的映射关系

    • 创建带mitmproxy环境的容器

      docker run --rm -it -v /home/docker/docker:/root/ --name mitmdump -p 8889:8889 450120127/pythonv2 mitmdump -p 8889 -s /root/info_to_db.py

      --rm选项表示容器退出后自动删除

    • 创建appium容器

      docker run --privileged -d -p 4723:4723 --name appium_douyin appium/appium
      docker run --privileged -d -p 4724:4723 --name appium_kuaishou appium/appium
      docker run --privileged -d -p 4725:4723 --name appium_toutiao appium/appium

       也可以只创建一个容器,参考:https://github.com/appium/appium-docker-android

    • 创建mongodb容器

      docker run -d -p 27017:27017 --name mongodb mongo
  • 夜神模拟器操作

    • 网络模式设为桥接模式
    • 安装好相应证书(容器mitmproxy代理的证书)
    • 安装好相应应用(抖音、快手、今日头条)
    • 以上3项设置好以后,分别开启3台模拟器
  • 本地cmd命令行中adb操作

    • 查看连接设备

      adb devices
    • 手动连接设备(上述未查看到设备的情况下)

      adb connect 127.0.0.1:62001
      adb connect 127.0.0.1:62025
      adb connect 127.0.0.1:62026

      夜神模拟器有规律,第一台62001,第二台62025,第3台62026,之后的设备+1

    • 改变设备连接方式(由usb模式改为tcpip模式)

      adb -s 127.0.0.1 62001 tcpip 6666
      adb -s 127.0.0.1 62025 tcpip 6666
      adb -s 127.0.0.1 62026 tcpip 6666

      tcpip后面指定设备的端口号(1-65535之间)

  • appium容器连接设备

    • 3台容器分别连接一台设备

      docker exec -it appium_douyin adb connect 设备ip:6666
      docker exec -it appium_kuaishou adb connect 设备ip:6666
      docker exec -it appium_toutiao adb connect 设备ip:6666

      如果连接错了设备,可通过adb kill-server后重新连接

  • 启动抓取系统

    • 进入python容器,运行爬虫脚本

 

上一篇:appium,元素定位和元素操作,使用uiautomatorviewer


下一篇:Appium和Python实现蚂蚁森林自动化收取能量