博客
关于我
「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(上)(34)
阅读量:364 次
发布时间:2019-03-04

本文共 5041 字,大约阅读时间需要 16 分钟。

上次说了如果通过dockerfile创建docker的镜像,接下来老铁们咱们通过创建好的镜像,创建容器,并且将代码映射到容器当中去,最终完成多任务端app抓取系统。源码:https://github.com/limingios/dockerpython.git (源码/「docker实战篇」python的docker-docker系统管理-基础概念(27))

 

任务需求详解

需要抓取三款应用的抖音,快手,今日头条,具体需要抓取的内容

1.抓取抖音当前视频的作者数据

2.抓取快手当前视频的作者数据
3.抓取今日头条推荐板块新闻

  • 代码部分–python-appium-docker源码里面有
    >python执行python部分的代码
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2019/3/18 20:31# @Author  : Aries# @Site    : # @File    : handle_appium_docker.py# @Software: PyCharmimport multiprocessingimport timefrom appium import webdriverfrom selenium.webdriver.support.wait import  WebDriverWaitdef get_size(driver):    x = driver.get_window_size()['width']    y = driver.get_window_size()['height']    return (x, y)def handle_appium(info):    cap = {        "platformName": "Android",        "platformVersion": "4.4.2",        "deviceName":info['device'],        "udid": info['device'],        "appPackage": info['appPackage'],        "appActivity": info['appActivity'],        "noReset": True,        "unicodeKeyboard": True,        "resetkeyboard": True    }    driver = webdriver.Remote("http://192.168.199.140:" + str(info["port"]) + "/wd/hub", cap)    l = get_size(driver)    x1 = int(l[0] * 0.5)    y1 = int(l[1] * 0.15)    y2 = int(l[1] * 0.9)    #抖音    if info["appPackage"] == "com.ss.andrpid.ugc.aweme":        #根据实际的我这里直接写//android,通过        if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath("//android")):            while True:                # 初始鼠标位置,从哪里开始,结束时鼠标位置,到哪里结束                driver.swipe(x1,y1,x1,y2)                time.sleep(3)    #快手    if info["appPackage"] == "com.smile.gifmaker":        # 根据实际的我这里直接写//android        if WebDriverWait(driver, 60).until(lambda x: x.find_element_by_xpath("//android")):            while True:                # 初始鼠标位置,从哪里开始,结束时鼠标位置,到哪里结束                driver.swipe(x1, y1, x1, y2)                time.sleep(3)    #快手    if info["appPackage"] == "com.ss.android.article.news":        # 根据实际的我这里直接写//android        if WebDriverWait(driver, 60).until(lambda x: x.find_element_by_xpath("//android")):            while True:                #初始鼠标位置,从哪里开始,结束时鼠标位置,到哪里结束                driver.swipe(x1, y1, x1, y2)                time.sleep(3)if __name__ =='__main__':    m_list = []    devices_list = [        {                "device": "192.168.199.133:5555",                "appPackage": "com.ss.android.ugc.aweme",                "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",                "port": 4723,                "key": '抖音'        },        {                "device": "192.168.199.133:5555",                "appPackage": "com.smile.gifmaker",                "appActivity": "com.yxcorp.gifshow.HomeActivity",                "port": 4725,                "key": '快手'        },        {                "device": "192.168.199.133:5555",                "appPackage": "com.ss.android.article.news",                "appActivity": "com.ss.android.article.news.activity.SplashBadgeActivity",                "port": 4727,                "key": '今日头条'        }    ]for device in (devices_list):    m_list.append(multiprocessing.Process(target=handle_appium,args=(device,)))for m1 in m_list:    m1.start()

  • 代码部分–decode_data源码里面有
    >python执行python部分的代码 通过mitmdump 获取数据保存在mongodb中。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2019/3/18 19:57# @Author  : Aries# @Site    : # @File    : decode_data.py# @Software: PyCharmimport jsonfrom handle_mongo import mongo_infodef response(flow):    #抖音    if 'aweme.snssdk.com/aweme/v1/feed' in flow.request.url:        douyin_data_dict = json.loads(flow.response.text)        for douyin_item in douyin_data_dict['aweme_list']:            mongo_info.insert_item(douyin_item)    #快手    elif 'api.gifshow.com/rest/n/feed/hot' in  flow.request.url:        kuaishou_data_dict = json.loads(flow.response.text)        for kuaishou_item in kuaishou_data_dict['feeds']:            mongo_info.insert_item(kuaishou_item)    #今日头条    elif 'is.snssdk.com/api/news/feed' in flow.request.url:        jrtt_data_dict = json.loads(flow.response.text)        for kuaishou_item in jrtt_data_dict['feeds']:            mongo_info.insert_item(kuaishou_item)

部署工作

python 爬虫获取信息其实不难,最难的是部署环境上。

  • 虚拟机直接用vagrant的方式

    源码里面包括vagrant文件,想了解如何使用可以查看我的中级文章讲解很详细

  • 镜像下载

    下载mongodb的镜像,Appium的镜像,zhugeaming/python3-appium的镜像

1.mongodb的镜像

mkdir bitnamicd bitnamimkdir mongodbdocker run -d -v /path/to/mongodb-persistence:/root/bitnami -p 27017:27017 bitnami/mongodb:latest

2.Appium的镜像

docker search appium#比较大1个多g,因为之前已经设置了加速器,根据自身的网速来进行下载。docker pull appium/appium

3.zhugeaming/python3-appium的镜像

docker pull zhugeaming/python3-appium

  • 网络连接
    > 之前在【「docker实战篇」python的docker-创建appium容器以及设置appium容器连接安卓模拟器(30)】里面说过一种比较变态的方法,让安卓模拟器连接虚拟机内部的dockerapium,但是这种适合vagrant的。建议还用这种吧已经验证了。

1.vagrant创建的虚拟机都是通过virtual box

2.设置共享文件夹

这是windows的环境下

3.在虚拟机挂载,将共享的文件夹挂载到虚拟机里面来

记住这个共享文件夹的名称叫handle_docker

mkdir dockercd dockersudo yum update && sudo yum -y install kernel-headers kernel-develsudo mount -t vboxsf handle_docker /root/docker/

PS:基本文件都挂载好了,已经很晚了,下次咱们继续把环境跑起来。

 

转载地址:http://zlpe.baihongyu.com/

你可能感兴趣的文章
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中建立静态网页和动态网页内容
查看>>
Vue3+Element-ul学生管理系统(第二十二课)
查看>>
Node-RED中怎样让网站返回JSON数据
查看>>
Node-RED中根据HTML文件建立Web网站
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>
Node-RED中配置周期性执行、指定时间阶段执行、指定时间执行事件
查看>>
Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
查看>>
Node-RED怎样导出导入流程为json文件
查看>>
Node-RED简介与Windows上安装、启动和运行示例
查看>>
Node-RED订阅MQTT主题并调试数据
查看>>
Node-RED通过npm安装的方式对应卸载
查看>>
node-request模块
查看>>
node-static 任意文件读取漏洞复现(CVE-2023-26111)
查看>>
Node.js 8 中的 util.promisify的详解
查看>>