登 录
注 册
< 全站精选
技术成长
精选书单
技术资讯
开发工具
院士解读刚刚起步的AI
深入用户画像
自动化爬取某东APP商品(一)
自动化爬取某东APP商品(二)
2021三大云计算趋势
数据在线:计算将成为公共服务
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
技术资讯
>>
自动化爬取某东APP商品(一)
自动化爬取某东APP商品(一)
2020-11-15 12:55:41 星期日 阅读:1722
![](/static/images/article_images/1693713168.9104252.jpeg) #### 重要声明 **1、本文内容只做纯技术交流、学习和分享,实际抓取数据无商业目的。 2、转载请加入文章作者和出处 ** --- #### 需求描述 1、通过爬虫程序自动打开某东APP 2、自动搜索指定商品关键词(比如:MacBook Pro)得到一堆商品列表(如下图) 3、自动将商品列表数据(商品名称、点赞数、收藏数、价格、评论数等)保存到本地Excel里(也可以保存到数据库、直接发送到Kafka等) 4、自动翻到下一页实现循环爬取 目标:程序启动后,无需人工干预,自动将需要搜索的商品数据保存到指定位置 ![](/static/images/article_images/1605452649.206978.png) #### 环境准备 1、一部安卓手机且安装好某东APP(也可以iOS,但是安卓更省事) 2、Python3.x 3、Android Studio(主要用来连接安卓手机,如果是iOS手机做实验,则需要使用Xcode) 4、mitmproxy 5、Appium #### 原理 通过自动化测试工具Appium模拟人操作App的各种动作(滑动、返回、点击等),同时将上述动作产生的流量(数据包)通过mitmproxy工具转发到指定的代理,通过代理解析这些数据并保存。 下面放了一张图方便理解: ![](/static/images/article_images/1605450001.2039618.png) 可以看到所有流经APP的数据(不管是发送还是接收),都会经过代理。所以只要APP信任这个代理,爬取数据就是轻而易举的事情了。 #### 抓取流程 由于篇幅原因,以下2个步骤暂时略过,后期会分享出来(其实都很简单,网上应该也有教程): 1、确保手机和电脑在同一个局域网内,且手机已经设置好了代理以及CA证书、电脑端已经安装mitmproxy。 2、手机与Appium已连接:可通过Appium内置的驱动自动启动APP,也可通过Python程序启动 **`一、接口分析`** 先使用人工的方式,通过使用mitmdump命令行工具和一个简单的Python脚本即可获得某东列表页的接口。Python程序如下: ``` from mitmproxy import ctx def response(flow): # 获取flow.request对象多有哪些方法 print(dir(flow.request)) # 获取请求的URL是什么 print(flow.request.url) # 返回请求的URL对应的响应内容 print(flow.response.text) ``` 在命令行执行mitmdump命令,并指定上述脚本。 ``` mitmdump -s my_script.py ``` 同时手机端搜索“MacBook Pro”并不断滑动商品列表页后,mitmdump监听终端显示的内容如下图。通过简单判断终端显示的内容就能看到如下图的接口是我们想要的。 ![](/static/images/article_images/1605450844.7587597.png) **`二、使用Appium控制APP`** 在电脑端启动Appium,并配置某东APP的Desired Capabilities参数,如下图: ![](/static/images/article_images/1605451214.0584502.png) 其中,appPackage在安装路径下,如下图,一般路径是:/Android/data/com.jingdong.app.mall 点击“Start Session”之后,手机端就启动了APP。此时手机端的画面就会同步到appium端,我们通过点击APP上各个按钮并记录下各个按钮的ID,方便接下来做自动化,如下图: ![](/static/images/article_images/1605451419.7870474.png) **`三、接口过滤与数据处理`** 由于某东的每一个页面,请求非常多,我们只需我们关注的那部分数据对应的接口(也就是上面第一步筛选出来的接口),所以需要做一个接口过滤的功能。 以下简短程序实现了接口过滤和抓取的数据存储到本地CSV的功能。 ``` from mitmproxy import ctx import json import pandas as pd import time def response(flow): # 之前获取的商品列表页的接口 url = "https://111.13.29.201/client.action" # 判断当前请求的接口是指定的接口时,才解析响应内容 if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text).get("wareInfo") df = pd.DataFrame(data) df.to_csv("/home/xxx.csv".format(str(time.ctime())), index=False, mode="a", encoding="GB18030", header=False) print(data) ``` 由于篇幅原因,余下内容见[下篇文章](https://libins.cn/detail/moduleName=python&articleId=e233b934b4d48bf224844d215f3bf4f2 "下篇文章")