美文网首页「实战篇」python的docker爬虫技术Docker容器码农的世界
「docker实战篇」python的docker-打造多任务端a

「docker实战篇」python的docker-打造多任务端a

作者: IT人故事会 | 来源:发表于2019-04-28 00:07 被阅读5次

    原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
    原文链接地址:「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(上)(34)

    上次说了如果通过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: PyCharm
    
    import multiprocessing
    import time
    from appium import webdriver
    from selenium.webdriver.support.wait import  WebDriverWait
    
    def 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: PyCharm
    
    import json
    from handle_mongo import mongo_info
    
    
    def 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 bitnami
    cd bitnami
    mkdir mongodb
    docker 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 docker
    cd docker
    sudo yum update && sudo yum -y install kernel-headers kernel-devel
    sudo mount -t vboxsf handle_docker /root/docker/
    

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

    相关文章

      网友评论

        本文标题:「docker实战篇」python的docker-打造多任务端a

        本文链接:https://www.haomeiwen.com/subject/lndpmqtx.html