大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)
沉沙 2019-06-26 来源 : 阅读 610 评论 0

摘要:本篇文章探讨了大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21),希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)


上次代码写到了可以通过接口获取粉丝的数据了,但是当时有个问题,需要人为的手动进行点击头像,然后点击粉丝,进入粉丝列表,然后在下拉刷新获取最新的粉丝。之前都说过appium模拟器可以帮咱们做这些事,下面通过appium来进行操作吧。源码:https://github.com/limingios/dockerpython.git (douyin)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

抖音短视频的操作步骤(一)

1.首先通过模拟器打开抖音,等待加载完毕。

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

2.完全进去后,左上角有个放大镜的窗口,点击搜索框,输入抖音ID(191433445)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

3.点击用户的标签,点击头像,在点击进入“陈赫” 前,先看看关注的标签是否存在

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

4.进入“陈赫”页面后,点击粉丝,然后进行模拟滑动,通过上节的实际使用的(mitmdump)解析粉丝数据存入数据库中。

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

编写python的脚本通过appium操作抖音(二)

  • 准备工作
    1.取消模拟器代理

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

2.下载抖音apk

//acj3.pc6.com/pc6_soure/2019-2/com.ss.android.ugc.aweme_500.apk

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

3.查看抖音apk的信息

查看appPackage和appActivity
1.进入安卓sdk目录下找到build-tools
2.随便选择一个版本号
3.通过cmd进入这个目录
4.输入命令获取aapt.exe dump badging 包名(必须在sdk的build-tools的版本的版本号的 aapt.exe目录下执行)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

只能获取appPackage=com.ss.android.ugc.aweme,appActivity获取不到

用另一个变态的方式

#获取列表adb devices#进入监控日志adb -s 127.0.0.1:62025 logcat>E:/log.txt#启动后,点开抖音,然后查看E盘目录下的log.txt文件

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

搜Displayed

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

获取到信息
appPackage: com.ss.android.ugc.aweme
appActivity:com.ss.android.ugc.aweme.main.MainActivity

3.获取安卓的版本号

打开模拟器,进入关于手机查看android的版本4.4.2

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

4.测试配置

1.启动安卓模拟器
2.启动appium应用
3.启动测试的python代码
4.顺序必须上找上边的

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

测试的python代码

#!/usr/bin/env python

import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {
""platformName"": ""Android"",
""platformVersion"": ""4.4.2"",
""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
}

driver = webdriver.Remote(""//localhost:4723/wd/hub"",cap)

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

#### 开始解析页面的xpath信息(三)1.关闭上边测试用的appium,单独启动下抖音app
![](https://upload-images.jianshu.io/upload_images/11223715-f5f1d5f103c3e3fe.png)
2.暂停播放,启动uiautomatorviewer。源码包中有加强版的uiautomatorviewer。看过之前文章的老铁都懂。一定要暂停,否则uiautomatorviewer。
![](https://upload-images.jianshu.io/upload_images/11223715-2dfd8ba8d4f6cc29.png)>还需要感叹一句的是,一天时间抖音app升级了,昨天写一半的文章,今天在看【搜索】按钮换到了右边,没事,只要页面有【搜索】按钮就可以了。![](https://upload-images.jianshu.io/upload_images/11223715-65e5bb30a1c8c8e6.png)>搜索按钮的xpath``` bash
//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]

3.进入搜索页面后,需要先点击搜索框,如果框中存在“191433445”,直接点击,不存在需要在搜索框中输入“191433445”,然后点击右边的搜索按钮

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

  1. 输入框红色的xpath

    //android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

  1. ×××的xpath

    //android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

3.紫色部分搜索按钮xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

3.搜索结果页面,点击【用户】,点击【头像】,进入【用户信息界面】。

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

1.用户xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.support.v7.app.ActionBar$Tab[3]/android.widget.LinearLayout[1]/android.widget.TextView[1]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

2.用户xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

4.进入【用户信息界面】,点击红色粉丝这个位置。进入粉丝列表

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

1.粉丝xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

python代码的编写

按照上边的业务逻辑开始代码的编写

#!/usr/bin/env pythonimport timefrom appium import webdriverfrom selenium.webdriver.support.ui import WebDriverWait
cap = {  ""platformName"": ""Android"",  ""platformVersion"": ""4.4.2"",  ""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}
driver = webdriver.Remote(""//localhost:4723/wd/hub"",cap)def get_size():
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']    return(x,y)try:    #点击搜索
    print('点击搜索')    if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]"")):
        driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]"").click()except:    #[26,76][115,165]
    driver.tap([(26,76),(115,165)],500)#定位搜索框if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]"")):    #获取douyin_id进行搜索
    driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]"").send_keys('191433445')    while driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]"").text != '191433445':
        driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]"").send_keys('191433445')
        time.sleep(0.1)#点击搜索driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]"").click()#点击用户标签if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(""//android.widget.TextView[@text='用户']"")):
    driver.find_element_by_xpath(""//android.widget.TextView[@text='用户']"").click()#点击头像if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]"")):
    driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]"").click()#点击粉丝按钮if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]"")):
    driver.find_element_by_xpath(""//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]"").click()
    x1 = int(driver.get_window_size()['width']*0.5)
    y1 = int(driver.get_window_size()['height']*0.75)
    y2 = int(driver.get_window_size()['height']*0.25)    while True:        if '没有更多了' in driver.page_source:            break
        driver.swipe(x1,y1,x1,y2)
        time.sleep(0.5)

PS:因用的是模拟器,导致电脑很卡,如果是真机就好些了,开启usb调试,通过adb devices,查看真机的名称,然后修改python的代码。

大数据采集之python的docker爬虫技术-抖音appium模拟滑动操作(21)

"      本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程