登 录
注 册
< 全站精选
技术成长
精选书单
技术资讯
开发工具
院士解读刚刚起步的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-17 13:32:43 星期二 阅读:1687
![](/static/images/article_images/1693713168.9104252.jpeg) #### 重要声明 **1、本文内容只做纯技术交流、学习和分享,实际抓取数据无商业目的。 2、转载请加入文章作者和出处 ** --- 本文是本次爬取的第二部分,第一部分请见[上篇文章](https://libins.cn/detail/moduleName=python&articleId=012f1849a97993fa8f2f2f2da1cf7e3a "上篇文章") **`四、开启代理处理程序`** 开启mitmdump监听,并指定第三步编写数据处理程序来解析截获的数据。 ``` mitmdump -s my_script.py ``` **`五、开启Appium服务器`** 其实只要代理开启以后,我们自己打开某东进行商品浏览的同时,数据已经被代理保存了。缺点是:还需要人进行商品的搜索,点击和浏览等。这很显然不是工程师思维。 所以,Appium就派上用场了。现在电脑端开启之前配置好的Appium。 注意:Appium和代理服务mitmproxy可以使用不同的PC,也可以使用同一台PC。 ![](/static/images/article_images/1605764841.6693301.png) **`六、编写Appium操作某东APP的程序`** 这里就需要用到爬取分析时记录下的各个元素的ID,并根据各APP启动时需要点击的元素不同,编写不同的驱动程序(比如:先启动->点击输入框->输入关键词->点击搜索按钮)。 以下程序使用Python Appium API启动某东APP,并进行点击、搜索、下滑等操作。 ``` # -*- coding: utf-8 -*- # /home/test/my_appium.py __author__ = "libins" from appium import webdriver import time # 指定需要往哪个服务器发送指令 server = "http://localhost:4723/wd/hub" # 配置APP启动参数 caps = { "platformName": "Android", "deviceName": "vivo_V3Max_A", "appPackage": "com.jingdong.app.mall", "appActivity": "main.MainActivity" } # 打开某东APP driver = webdriver.Remote(server, caps) # 点击我知道了按钮 iknow = driver.find_element_by_id("com.jingdong.app.mall:id/beh") iknow.click() time.sleep(2) # 点击开始按钮 starts = driver.find_element_by_id("com.jingdong.app.mall:id/bve") starts.click() time.sleep(2) # 点击搜索框 box = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[4]/android.widget.ViewFlipper/android.widget.LinearLayout/android.widget.TextView") box.click() time.sleep(10) # 向输入框发送需要搜索的商品名称 inputs = driver.find_element_by_id("com.jd.lib.search:id/a3k") inputs.send_keys("MacBook Pro") time.sleep(1) # 点击搜索按钮 search = driver.find_element_by_id("com.jingdong.app.mall:id/ag9") search.click() # 注意,这里需要多sleep一会,防止还没加载出来,下面就开始滑动,导致程序报错。 time.sleep(15) # 向下滑动商品列表,模拟拖动,这里拖动100次 for i in range(100): # 因为是上下滑动,所以x坐标可以不变。随便指定一个值,因为屏幕是1980(y) * 1080(x),所以,对于x,我就随便取个540. # 而y轴则决定滑动距离,从屏幕底部(y值较大)滑动到顶部(y值较小),最后一个参数决定滑动时间,这里设置为500毫秒 driver.swipe(start_x=540, start_y=1600, end_x=540, end_y=680, duration=500) time.sleep(3) ``` **`七、启动Appium程序`** 启动上面的Appium程序,就可以在旁边坐着喝茶了。时不时观察以下两个地方是否正常即可: 1.代理的监听日志是否正常(下图为正常日志) ![](/static/images/article_images/1605765622.8296292.png) 2.Appium Server服务器日志是否正常(下图为正常日志) ![](/static/images/article_images/1605765730.5548608.png) **`八、验收爬取的数据`** 上面的代理和Appium都正常运行后,再检查抓取的数据是否符合预期,相关字段是否正确解析。 下图是正常抓取的结果(局部) ![](/static/images/article_images/1605766053.0521483.png) --- **`拓展`** 如果想将爬取的数据实时输送到Kafka或者,直接保存到数据库,直接在第三步的代理解析程序里添加相应的Kafka生产者和数据库连接代码即可。