记一次app爬虫在centos7中部署的经历

1. 项目介绍

本爬虫主要是爬取 某视频app 指定vlogger号下的视频列表信息,所爬取到的数据经过一定的规则解析后存入MySQL数据库,并且需要每日至少爬取一次。本项目利用 mitmproxy 扮演中间人角色,截获手机app和服务器两者间的通信数据,经过一定的规则解析后便 调用 http api接口(数据写入MySQL的逻辑,是java的同事写了一个简单的后台,爬虫这边只负责爬取数据,然后 POST提交的方式调用api接口),某视频app利用airtest模拟人进行屏幕滑动,解放双手。

2. 系统环境及第三方库环境

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 手机一部

3. 环境配置安装

3.1 python3.6 安装

python3.6的安装以及环境变量的配置,网上有很多blog教程啥的,其实主要就是设置好prefix路径,已经编译安装成功后的环境变量设置。可以参考这一篇博客:
centos系统下源码安装python3.6

3.2 安卓adb安装

本人在网上找的各种博客,安装adb几乎都是先安装Android Studio,然后再通过 Android Studio去安装相应的adb。但是,我这边是centos系统,我只想简简单单的安装一个adb用于连接安卓手机而已。

3.2.1 下载地址

链接:https://developer.android.google.cn/studio/releases/platform-tools.html?hl=zh_cn

在这里插入图片描述
这里点第3个,然后一路确认下去,最后无脑下载就行了。然后再通过scp命令 发送到centos系统所在的机器上面。

3.2.2 安装并配置环境变量

下载并传送到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

出现如上界面,则表示已经安装成功并配置好了环境变量

3.3 mitmdump安装

mitmdump的安装就比简单了,直接通过 pip 就可以安装了

pip3.6 install mitmproxy

安装成功后, 在终端 输入 : mitmdump 命令, 若出现:

Proxy server listening at http://*:8080

则表明 mimtproxy也安装成功了,并且在当前用户的家目录下生成了一个 .mitmproxy 文件夹,进入该文件夹后,有以下几个文件:
证书介绍
这里,需要将: mitmproxy-ca-cert.pem 文件发送到安卓手机上面。其具体的安装步骤可以参考如下博客:
小米手机安装mitmproxy证书

3.4 mongo安装以及pymongo库的安装

mongo数据库的安装也很简单,这里参考如下博客即可

Centos7下安装 Mongo4.0

然后再通过 pip3.6 install pymongo 来安装 pymongo库即可

3.5 airtest 和 pocoui的安装

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 "<stdin>", line 1, in <module>
  File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/core/api.py", line 10, in <module>
    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 <module>
    from airtest import aircv
  File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/aircv/__init__.py", line 1, in <module>
    from .aircv import *  # noqa
  File "/usr/local/python3.6/lib/python3.6/site-packages/airtest/aircv/aircv.py", line 5, in <module>
    import cv2
  File "/usr/local/python3.6/lib/python3.6/site-packages/cv2/__init__.py", line 3, in <module>
    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也能够使用啦。

3.6 apscheduler安装

直接通过 ** pip3.6 install apscheduler** 命令来安装 apscheduler

4. 运行及相关报错问题的解决办法

4.1 运行airtest相关的脚本,报错:Adb connection Error
  1. 手机没有打开相应的调试模式。常见手机操作步骤:设置 > 开发人员选项 > USB调试 然后开启usb调试。
  2. shell终端执行命令 :adb kill-server && adb server
  3. shell终端再次执行命令:adb devices -l
 ****@********  adb devices -l
List of devices attached
FJH5T18719011920       device usb:336592896X product:**** model:**** device:**** transport_id:1

当出现这样的信息时,说明此时手机连接成功。

4.2 运行 mitmdump -s script.py时,手机断网了
  1. 首先确定被抓包的app是否有反代理检测。若没有,那就是自己的问题了
  2. 查看手机配置的无线网ip和port是否和电脑的配置相对应
4.3 运行 mitmdump -s script.py时,手机有网,但是script.py脚本却好像没有捕获所关注的http请求或响应
  1. 检查script.py脚本中是否有导入外部包或者模块出错。mitmdump就是这个特点,当引入第三方包或者库出错,但是却不影响mitmdump的开启的时候,此时,mitmdump看起来像是正常运行,但是,事实上此时script.py脚本不会执行任何操作,所以就无法利用mitmdump截获所要的数据了。
4.4 apscheduler定时任务开启了,但是却没在那个时间点运行相应的脚本
  1. 这个问题首先查看日志,看是否有报错异常等信息,并处理
  2. apscheduler的 timezone 的问题,时区改为 “Asia/Shanghai”
schedudler.add_job(worker, 'cron',day="*/1",  timezone="Asia/Shanghai")

或者更改 centos系统中的时区(不建议更改centos7中的时区)

timedatectl set-timezone Asia/Shanghai
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值