python爬虫编程解析及案例 mitmproxy + python+Appium抓取抖音粉丝信息

前言

  1. 环境的准备

  2. 环境配置
    2.1 filder配置
    2.2 xposed和JustTrustMe的配置
    2.3 mitmproxy配置
    2.4 配置Android Studio
    JDK的配置
    配置Appium

  3. 定位页面元素

  4. 运行项目
    前言

  5. 环境的准备
    夜神模拟器(Android 5.1.1)
    filder
    mitmproxy
    python3.7.3
    jdk1.8.0_251
    Android Studio(Android SDK 5.1)
    xposed(Android 5.1)
    JustTrustMe
    这里先说明一下,抖音有ssl验证,夜神模拟器安装xposed和JustTrustMe之后,才能正常抓包,不然打开抖音是没有网的。

  6. 环境配置
    除了python3.7.3和mitmproxy,其余的资源都在百度网盘中,自取,地址:https://pan.baidu.com/s/1ZtvZIQvQ8A6rp02HtAOudQ,提取码:4mu1。

2.1 filder配置
安装好filder后,打开filder,左上角Tools -> Options,设置如下:

点击Actions,选择Trust Root Certificate,然后全部选是,安装window端的证书

到这一步filder,PC端的算是配好了,然后关闭域防火墙,获取PC端的ip地址,方法如下:

然后打开夜神模拟器,进入wifi,配置代理:

然后打开网页进入192.168.1.19:8888,下载证书,

下载完成了,进入设置 -> 安全 -> 从SD卡安装,安装刚刚下载的证书,随便取名,

到处,filder就可以抓到夜神模拟器上的数据包了,而要抓抖音的包得安装xposed和JustTrustMe。

2.2 xposed和JustTrustMe的配置
在网盘中下好xposed和JustTrustMe的apk文件后,直接点夜神右侧的安装APK,找到这两个框架的apk文件,点击安装,这里有个先后顺序,先安装xposed,安装后夜神桌面有一个xposed install,打开,然后下载xposed,

下载后会显示Xposed框架89版已激活,然后安装JustTrustMe的apk,安装好后,在xposed install里面勾选JustTrustMe,

到这里就安装完成了,然后下载最新版的抖音,就可以用filder抓包了:

记下这个url的前半部分,等会有用的。

2.3 mitmproxy配置
首先,在PC端通过pip install mitmproxy安装mitmproxy模块,安装好后,继续通过cmd,输入mitmproxy,这样就会在系统盘的用户目录下的.mitmproxy文件夹下生成许多证书,点击mitmproxy-ca-cert.p12,选本地计算机,直接点下一步,设置密码的位置不用填,直接下一步,证书照下图放:

这样PC端的证书就配好了,然后配夜神的,将mitmproxy-ca-cert.pem直接拖到夜神模拟器中,还是按照上面安装filder夜神模拟器端的证书方法操作,安装证书,然后创建douyin_fans.py文件:

import json

def response(flow):
if ‘api3-normal-c-hl.amemv.com/aweme/v1/user/follower/list’ in flow.request.url:
for user in json.loads(flow.response.text)[‘followers’]:
user_info = dict()
user_info[‘nickname’] = user[‘nickname’]
user_info[‘share_id’] = user[‘uid’]
user_info[‘douyin_id’] = user[‘short_id’]
user_info[‘sec_uid’] = user[‘sec_uid’]
if user_info[‘douyin_id’] == ‘0’:
user_info[‘douyin_id’] = user[‘unique_id’]
user_info[‘update_time’] = user[‘unique_id_modify_time’]
print(user_info)
然后配置夜神的wifi的代理,同样的8888端口和ip,关掉域防火墙,然后在douyin_fans.py文件目录打开命令行输入mitmdump -p 8888 -s douyin_fans.py,然后打开夜神上的抖音进入到粉丝里面,就可以看到命令行有输出了,如下图:

到此处,mitmproxy已经配置好了,而且可以抓到粉丝了,但是需要手动滑粉丝列表才能进行翻页,这里就需要使用Appium进行自动滑动粉丝列表了。

2.4 配置Android Studio
这里先解释一下为什么要下载Android Studio,主要是夜神模拟器是Android系统,而用Appium控制Android系统就需要Android的SDK,而现在的Android SDK与Android Studio是绑定的,安装好Android Studio后,按下图操作:

进入SDK Manager,安装Android5.1,并记住skd所在的路径:

安装好SDK后,进入对应的路径,然后打开系统的环境变量配置ANDROID_HOME以及一些path:

然后将platform-tools下的adb.exe文件放到夜神模拟器的bin目录中,与nox_adb.exe文件替换,并改为相同的名称nox_adb.exe,到此Android SDK的环境全部配完。

JDK的配置
安装好jdk后,在系统变量中配置JAVA_HOME,以及在path中添加jdk的bin路径,jdk的环境就配好了。

配置Appium
安装好Appium后直接打开,启动服务:

platformName:平台名称,一般是Android或iOS.

deviceName:设备名称,手机的具体类型

appPackage:App程序包名

appActivity:入口Activity名,通常以.开头

adb shell

dumpsys window |grep mCurrentFocus

然后点击放大镜,然后按图配置如下参数:

然后save,然后start session,这样夜神就会自动打开抖音,到此所有环境配置完毕,下面开始页面元素定位以及爬取的相关工作。

  1. 定位页面元素
    打开cmd输入monitor,等会就会出现一个界面,然后打开夜神的抖音,进行如下操作:

从左到右依次操作,这样就可以得到页面元素放大镜的id,后面的账号搜索点击元素都用同样的方法一步一步的得到所有元素的id值,编写douyin_appium.py文件:

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time

option = {
“platformName”: “Android”,
“platformVersion”: “Andriod5.1.1”,
“deviceName”: “127.0.0.1:62001”,
“appPackage”: “com.ss.android.ugc.aweme”,
“appActivity”: “com.ss.android.ugc.aweme.main.MainActivity”,
“noReset”: True,
“unicodekeyboard”: True,
“resetkeyboard”: True,
“automationName”: “UiAutomator1”
}

driver = webdriver.Remote(‘http://localhost:4723/wd/hub’, option)

try:
if WebDriverWait(driver, 5).until(lambda x: x.find_element_by_id(‘com.ss.android.ugc.aweme:id/c63’)):
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/c63’).click()
except:
pass

def get_size():
x = driver.get_window_size()[‘width’]
y = driver.get_window_size()[‘height’]
return (x, y)

try:
if WebDriverWait(driver, 3).until(lambda x:x.find_element_by_id(‘com.ss.android.ugc.aweme:id/ai4’)):
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/ai4’).click()
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/ai4’).send_keys(‘lv123052’)
if WebDriverWait(driver, 3).until(lambda x: x.find_element_by_id(‘com.ss.android.ugc.aweme:id/ghv’)):
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/ghv’).click()
if WebDriverWait(driver, 2).until(lambda x: x.find_element_by_id(‘android:id/text1’)):
driver.find_element_by_id(‘android:id/text1’).click()
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/ckr’).click()
except:
pass

try:
if WebDriverWait(driver, 5).until(lambda x:x.find_element_by_id(‘com.ss.android.ugc.aweme:id/bce’)):
driver.find_element_by_id(‘com.ss.android.ugc.aweme:id/bce’).click()
time.sleep(2)
except:
pass

size = get_size()
x1 = int(size[0]*0.5)
x2 = int(size[0]*0.7)
y1 = int(size[1]*0.9)
y2 = int(size[1]*0.2)

while(True):
time.sleep(0.5)
driver.swipe(x1, y1, x2, y2)

  1. 运行项目
    夜神的代理打开,域防火墙关掉,然后用mitmdump命令运行douyin_fans.py文件,这里得说明一下,mongdb数据库的操作在douyin_fans.py文件中自行添加,然后直接run,douyin_appium.py文件,这样就会自行爬取抖音的某账号粉丝信息,效果如图:

————————————————

你可能感兴趣的:(爬虫,python,开发语言)