本爬虫主要是爬取 某视频app 指定vlogger号下的视频列表信息,所爬取到的数据经过一定的规则解析后存入MySQL数据库,并且需要每日至少爬取一次。本项目利用 mitmproxy 扮演中间人角色,截获手机app和服务器两者间的通信数据,经过一定的规则解析后便 调用 http api接口(数据写入MySQL的逻辑,是java的同事写了一个简单的后台,爬虫这边只负责爬取数据,然后 POST提交的方式调用api接口),某视频app利用airtest模拟人进行屏幕滑动,解放双手。
centos7.6
Python3.6.4
mitmproxy 4.0.4
adb 1.0.41
airtest 1.0.27
pocoui 1.0.76
pymongo 3.9.0
mongo 4.0.9
Red mi 4a 手机一部
python3.6的安装以及环境变量的配置,网上有很多blog教程啥的,其实主要就是设置好prefix路径,已经编译安装成功后的环境变量设置。可以参考这一篇博客:
centos系统下源码安装python3.6
本人在网上找的各种博客,安装adb几乎都是先安装Android Studio,然后再通过 Android Studio去安装相应的adb。但是,我这边是centos系统,我只想简简单单的安装一个adb用于连接安卓手机而已。
链接:https://developer.android.google.cn/studio/releases/platform-tools.html?hl=zh_cn
这里点第3个,然后一路确认下去,最后无脑下载就行了。然后再通过scp命令 发送到centos系统所在的机器上面。
下载并传送到centos系统中,然后 解压:
unzip platform-tools_r29.0.2-linux.zip
解压之后,便设置环境变量
假设 platform-tools 所在的路径是: /user/test/platform-tools
在 /etc/profile文件中添加如下几行配置:
export ANDROID_SDK_HOME="/user/test"
export PATH="$PATH:$ANDROID_SDK_HOME/platform-tools"
然后 source /etc/profile 使配置立即生效
然后 adb --version 检验 adb 是否配置成功
[*****@********]# adb --version
Android Debug Bridge version 1.0.41
Version 29.0.2-5738569
Installed as /********/platform-tools/adb
出现如上界面,则表示已经安装成功并配置好了环境变量
mitmdump的安装就比简单了,直接通过 pip 就可以安装了
pip3.6 install mitmproxy
安装成功后, 在终端 输入 : mitmdump 命令, 若出现:
Proxy server listening at http://*:8080
则表明 mimtproxy也安装成功了,并且在当前用户的家目录下生成了一个 .mitmproxy 文件夹,进入该文件夹后,有以下几个文件:
证书介绍
这里,需要将: mitmproxy-ca-cert.pem 文件发送到安卓手机上面。其具体的安装步骤可以参考如下博客:
小米手机安装mitmproxy证书
mongo数据库的安装也很简单,这里参考如下博客即可
Centos7下安装 Mongo4.0
然后再通过 pip3.6 install pymongo 来安装 pymongo库即可
airtest 和 pocoui的安装都可以通过 pip命令来安装
pip3.6 install airtest
pip3.6 install pocoui
能够顺利安装成功,但是运行airtest相关的脚本却报错,报错信息如下:
[****@**********]# python3.6
Python 3.6.4 (default, May 3 2019, 16:14:27)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from airtest.core.api import *
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/core/api.py", line 10, in
from airtest.core.cv import Template, loop_find, try_log_screen
File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/core/cv.py", line 13, in
from airtest import aircv
File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/aircv/__init__.py", line 1, in
from .aircv import * # noqa
File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/aircv/aircv.py", line 5, in
import cv2
File "/usr/local/python3.6/lib/python3.6/site-packages/cv2/__init__.py", line 3, in
from .cv2 import *
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
>>>
这个错误本质上就是 导入cv2 出错,报错信息提示找不到 libSM.so.6
具体解决措施可以按照下面的步骤来:
1 错误:
ImportError: libXext.so.6: cannot open shared object file: No such file or directory
安装 yum install libXext.x86_64
2 错误
ImportError: libSM.so.6: cannot open shared object file: No such file or directory
安装: yum install libSM.x86_64
3 错误
libXrender.so.1: cannot open shared object file: No such file or directory
安装: yum install libXrender.x86_64
这样,最后 cv2 库能够导入啦,airtest相关的api也能够使用啦。
直接通过 ** pip3.6 install apscheduler** 命令来安装 apscheduler
****@******** adb devices -l
List of devices attached
FJH5T18719011920 device usb:336592896X product:**** model:**** device:**** transport_id:1
当出现这样的信息时,说明此时手机连接成功。
schedudler.add_job(worker, 'cron',day="*/1", timezone="Asia/Shanghai")
或者更改 centos系统中的时区(不建议更改centos7中的时区)
timedatectl set-timezone Asia/Shanghai