内容简介:上次说了如果通过dockerfile创建docker的镜像,接下来老铁们咱们通过创建好的镜像,创建容器,并且将代码映射到容器当中去,最终完成多任务端app抓取系统。源码:https://github.com/limingios/dockerpython.git (源码/「docker实战篇」python的docker-docker系统管理-基础概念(27))需要抓取三款应用的抖音,快手,今日头条,具体需要抓取的内容
上次说了如果通过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:基本文件都挂载好了,已经很晚了,下次咱们继续把环境跑起来。
>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:上一篇:已是最新文章
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coming of Age in Second Life
Tom Boellstorff / Princeton University Press / 2008-04-21 / USD 29.95
The gap between the virtual and the physical, and its effect on the ideas of personhood and relationships, is the most interesting aspect of Boellstorff's analysis... Boellstorff's portrayal of a virt......一起来看看 《Coming of Age in Second Life》 这本书的介绍吧!