首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Appium爬取当当网App的所有数据

第一时间获取 Python 技术干货!

阅读文本大概需要 10 分钟。

01

目标

场景:有时候通过传统的方法去爬一些 Web 网页或者 APP,受限于对方的反爬方案,很难爬到想要的数据,这个时候可以考虑使用「Appium」结合「mitmproxy」的方式去爬取数据。

其中,Appium 负责驱动 App 端自动化运行,mitmproxy 负责截取请求数据并解析保存到数据库。

今天的目的是爬取「当当网」的所有数据,并保存到 MongoDB 数据库当中。

02

准备工作

首先,需要在 PC 上安装好 Charles 和 Appium Desktop,并配置好 mitmproxy 环境。

另外,需要准备一台 Android 手机,另外 PC 端配置好 Android 开发环境。

03

爬取思路

1.在配置好手动代理的情况下,打开 Charles 实时捕获客户端的发起的网络请求。

打开当当网搜索商品的页面,搜索关键字「Python」,可以在 Charles 查看到当前请求的 URL 地址包含:「word=Python」

编写 mitmproxy 的执行脚本文件,重写 response() 函数,通过对请求的 URL 进行过滤,对有用的数据进行整理并保存到 MongoDB 数据库当中。

先打开客户端的手动代理监听 8080 端口,然后执行「mitmdump」命令,然后滚动商品界面,发现数据到写入到数据库中了。

2.下面我们要利用 Appium 帮我们实现自动化。

首先打开 Appium Desktop,并启动服务。

打开 Android Studio,利用菜单栏的 Build-Analyze APK 分析当当网的安卓应用,打开AndroidManifest.xml

可以发现应用包名和初始化 Activity 分别为:

获取到包名和初始 Activity 后,就可以利用 WebDriver 去模拟打开当当网 APP。

接着使用 Android SDK 自带的工具uiautomatorviewer获取到元素信息,使用 Appium 中的 WebDriver 去操作 UI 元素。

第一次打开应用的时候,可能会出现红包雨对话框、新人专享红包对话框、切换城市对话框,这里需要通过元素 ID 获取到关闭按钮,执行点击操作来关闭这些对话框。

这里创建一个新的线程来单独处理这些对话框。

接下来就是点击搜索按钮,然后输入内容,执行点击搜索对话框。

待第一页的数据加载完全之后,可以一直向上滚动页面,直到数据全部被加载完全,数据会由 mitmproxy 自动保存到 MongoDB 数据库当中。

04

结果

首先使用 mitmdump 开启请求监听的服务,然后执行爬取脚本。

App 会自动打开,执行一系列操作后,到达商品界面,然后自动滑动界面,通过 mitmproxy 自动把有用的数据保存到 MongoDB 数据库中。

我已经将全部源码上传到后台上,公众号回复「Appium」即可获得。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190120G0PWTX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券