您好,登錄后才能下訂單哦!
上次說了如果通過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("http://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("http://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("http://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:基本文件都掛載好了,已經很晚了,下次咱們繼續把環境跑起來。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。