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),用于挂载共享文件夹
-
如何修改脚本内容
- 在本地文件夹修改即可,因为是共享文件夹,所以本地修改以后,docker虚拟机以及容器中的脚本都会相应变化
-
-
创建相应容器,并将docker虚拟机中的文件映射到容器中
-
创建带python环境的容器
docker run -it -v /home/docker/docker:/root/ --name python 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容器,运行爬虫脚本
-