目 标 场 景

经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的收入。

闲鱼上大量的商品,很难精准判断哪些受欢迎,哪些好卖;一个个录入数据去做数据分析,浪费时间的同时,效率也极其的低效。

本篇文章的目的是利用 Python 自动化 来获取某类商品中最好卖的商品以供参考。

ps:本文仅限用于技术交流,请勿用于其他用途。

准 备 工 作

在编写代码之前,需要做如下准备工作:

1、配置好 Android ADB 开发环境

2、Python 虚拟环境内安装 pocoui 依赖库

3、安装数据可视化依赖库 pyecharts

# pocoui
pip3 install pocoui# 数据可视化图表
pip3 install pyecharts -U

编 写 代 码

我们分 7 个步骤来实现这个功能,分别是:打开目标应用客户端、检索关键字到商品列表界面、计算最佳滑动距离、筛选商品、获取商品链接地址、写入文件排序并统计商品、配置参数。

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:957324352

1 步,使用 pocoui 自动化打开目标应用。

def __pre(self):"""准备工作:return:"""home()stop_app(package_name)start_my_app(package_name, activity)# 等待到达桌面self.poco(text='闲鱼').wait_for_appearance()self.poco(text='鱼塘').wait_for_appearance()self.poco(text='消息').wait_for_appearance()self.poco(text='我的').wait_for_appearance()print('进入闲鱼主界面')

进入到闲鱼首页之后,应用端会拿到剪切板的数据,当存在特定规律的口令的时,会立马弹出一个对话框,因此需要模拟关闭对话框的操作。

# 如果指定时间内内有淘口令,就关闭
for i in range(10, -1, -1):close_element = self.poco('com.taobao.idlefish:id/ivClose')if close_element.exists():close_element.click()breaktime.sleep(1)

打开应用之后,就可以进行第 2 步操作了。

通过要检索的关键字,模拟输入到输入框内,然后点击搜索按钮,一直等待搜过列表出现为止。

另外,为了更加方便地处理数据,商品列表切换到列表模式,即一行只显示一个商品。

def __input_key_word(self):"""输入关键字:return:"""# 进入搜索界面perform_click(self.poco('com.taobao.idlefish:id/bar_tx'))# 搜索框内输入文本self.poco('com.taobao.idlefish:id/search_term').set_text(self.good_msg)# 点击搜索按钮while True:# 等待检索结果列表出现if not self.poco('com.taobao.idlefish:id/list_recyclerview').exists():perform_click(self.poco('com.taobao.idlefish:id/search_button', text='搜索'))else:break# 等待商品列表完全出现self.poco('com.taobao.idlefish:id/list_recyclerview').wait_for_appearance()# 切换到列表perform_click(self.poco('com.taobao.idlefish:id/switch_search'))

3 步,计算最佳滑动距离。

为了保证爬取数据的高效性,获取计算出每次滑动的最佳距离。

首先先拿到当前界面的 UI 控件树,然后通过控件的属性 ID 拿到商品的坐标,进而得到每一项商品的高度。

最后,通过观察屏幕中出现商品的数目得到最佳滑动距离。

def __get_good_swipe_distance(self):"""获取每次滑动,最合适的距离:return:"""element = Element()# 保存当前的UI树到本地element.get_current_ui_tree()# 第一个商品Item的坐标position_item = element.find_elment_position_by_id_and_index("com.taobao.idlefish:id/card_root","1")# 商品的高度item_height = position_item[1][1] - position_item[0][1]# 通过观察,当前屏幕有3件商品return item_height * 3

4 步,筛选商品。

上面的步骤拿到最佳的滑动距离,不停的滑动页面遍历列表元素的子 Item。

需要注意的是,为了避免滑动惯性导致的误差,每一次的滑动时长最好设置为 2s 以上。

通过商品 Item 筛选出想要数目大于预设数字的商品。

# 多少人想要
want_element_parent = item.offspring('com.taobao.idlefish:id/search_item_flowlayout')if want_element_parent.exists():# 想要数/已付款数目want_element = want_element_parent.children()[0]want_content = want_element.get_text()# 过滤掉【已付款】等其他商品,只保留个人发布商品if '人想要' not in want_content:continue# 拿到商品想要的具体数目,代表商品热度want_num = get_num(want_content)if int(want_num) < self.num_assign:# print('不达标,过滤掉')passelse:# 商品想要数达标,加入统计

5 步,获取商品链接地址。

对于上一步满足条件的商品,点击商品 Item 进入到商品详情页面。

接着点击右上角的分享按钮,会立即弹出分享对话框。

然后点击口令控件,会提示口令复制到系统剪切板成功。

# 点击更多
while True:if self.poco('com.taobao.idlefish:id/ftShareName').exists():breakprint('点击更多~')perform_click(self.poco(text='更多'))# 点击复制淘口令
perform_click(self.poco('com.taobao.idlefish:id/ftShareName', text='淘口令'))# 拿到口令码
taobao_code_element = self.poco('com.taobao.idlefish:id/tvWarnDetail')taobao_code = taobao_code_element.get_text()

6 步,写入商品、排序并统计数据。

将上面获取到的商品标题、想要数、分享地址写入到 CSV 文件中。

然后读取数据文件,通过对表格中的第二列进行反向排序,使商品按照想要数进行降序排列。

def __sort_result(self):"""对爬取的结果进行排序:return:"""reader = csv.reader(open(self.file_path), delimiter=",")# 头部标题head_title = next(reader)# 按照第二列进行逆序排列sortedlist = sorted(reader, key=lambda x: (int(x[1])), reverse=True)# 写入头部数据write_to_csv(self.file_path, [(head_title[0], head_title[1], head_title[2])], False)for value in sortedlist:write_to_csv(self.file_path, [(value[0], value[1], value[2])], False)return sortedlist

最后拿到前 10 项数据,利用 pyecharts 生成统计图表。

def draw_image(self, sortedlist):"""画图:param sortedlist::return:"""# 标题列表titles = []# 销量sales_num = []# 拿到爬取结果的标题、销量两个列表with open(self.file_path, 'r') as csvfile:# 读取文件reader = csv.DictReader(csvfile)# 加入列表中for row in reader:titles.append(row['title'])sales_num.append(row['num'])# 数目限制if len(titles) > self.num:titles = titles[:self.num]sales_num = sales_num[:self.num]# 画图bar = (Bar().add_xaxis(titles).add_yaxis("哪些好卖", sales_num).set_global_opts(title_opts=opts.TitleOpts(title="我要卖货")))bar.render('%s.html' % self.good_msg)

7 步,配置参数。

编写 yaml 文件,指定要爬取商品的关键字、爬取时间、想要数考核指标数、筛选商品数目。

goods:# 搜索商品1,包含搜索关键字、爬取时间good1:key_word: '资料'   # 搜索关键字key_num: 100  # 筛选【想要数】的临界点num: 10      # 只筛选爆款time: 600   # 爬取时间(秒)

结 果 结 论

提前配置好商品关键字、爬取时间等参数,即可以爬取到符合要求的、最好卖的商品数据,最终以图表的方式展示出来。

在这里还是要推荐下我自己建的Python开发学习群:957324352,群里都是学Python开发的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!

闲鱼上哪些商品抢手?Python 分析后告诉你相关推荐

  1. 为什么闲鱼不能搜索python_闲鱼上哪些商品抢手?Python 分析后告诉你

    原标题:闲鱼上哪些商品抢手?Python 分析后告诉你 阅读文本大概需要 10 分钟. 1 目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的睡后收入. 闲鱼 ...

  2. 第十八期:闲鱼上哪些商品抢手?Python分析后告诉你

    经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的 睡后收入. 作者:星安果 1.目标场景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的睡后收 ...

  3. Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~

    前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pyecharts模块: 以及一些Py ...

  4. 为什么闲鱼不能搜索python_Python 分析后告诉你闲鱼上哪些商品抢手?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...

  5. #私藏项目实操分享#Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~

    前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pyecharts模块: 以及一些Pyt ...

  6. 抓球球的机器人应该怎么玩_闲鱼2019年应该怎么玩?闲鱼上面的几大规则

    闲鱼2019年应该怎么玩?闲鱼上面的几大规则 如今已经是2019年了,还是有好一些的伙伴们在求闲鱼流量,闲鱼新的一年是不是有什么大的改动,还可以照着往年的玩法继续做闲鱼吗,对于这样的问题,我实在有些看 ...

  7. 小家电的精致生活幻想,都在闲鱼上被粉碎了

    本文经授权转载自公众号"DT财经" ID | DTcaijing 作者 | 何书瑶 24岁的钟白是个不折不扣的新媒体社畜,但996的生活并没有打消她"精致生活" ...

  8. 闲鱼怎么发布宝贝引流?推广方法就是不断的在闲鱼上发布转让

    闲鱼怎么发布宝贝引流?推广方法就是不断的在闲鱼上发布转让 哥们说他们三个都是学生,以前是学校计算机协会的,大家都是崇尚自由的人,毕业以后不想去给别人打工,于是就自己单干,他们的货源就是快要倒闭的网吧, ...

  9. 在闲鱼上卖什么东西比较赚钱?

    在闲鱼上卖什么东西比较赚钱?这牵扯做闲鱼的一个关键问题:选品.可以这么说,会选品,选好品,就成功了一半.剩下的一半,一半交给技术,另一半交给运气. 怎么选品?要遵循下面几个原则: 第一,做实物,但不要 ...

最新文章

  1. 神经网络反向传播梯度计算数学原理
  2. angular 引入编辑器以及控制器的学习和理解。。。
  3. OpenStack行业实践和发展趋势
  4. P2796-Facer的程序【dp】
  5. linux下硬盘测速工具hdparm
  6. 页面css样式找不到问题
  7. 数字式轮胎气压计行业调研报告 - 市场现状分析与发展前景预测
  8. Redis的持久化 RDB AOF
  9. C++基础——bitset与string的相互转化
  10. Python3.6 所有内置函数
  11. Putty连接TPYBorad v102 开发板教程
  12. Boost Thread 编程指南、Boost线程入门教程
  13. java爬虫实例_Java爬虫完整实例源码
  14. xvidcore交叉编译
  15. geoJson全国各省市地图json数据获取
  16. Java 模拟新浪登录 2016
  17. 【基础】一叶知秋,从背包问题到动态规划
  18. MATLAB怎么生成一个周期信号,matlab产生方波脉冲和周期性方波信号
  19. javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
  20. Express文件表单解析中间件 Multer简介

热门文章

  1. 判断一个数为质数或合数
  2. 关于大街上看美女这件事
  3. 【小联盟 】“精准匹配,资源共享“小联盟CEO私享第四期报名启动
  4. Worthington 木瓜蛋白酶的说明及应用
  5. android7.1 系统ota升级与升级失败解决方法
  6. vue的组件 components
  7. 让您的客户了解您的制造过程“VR云看厂实时数字化展示”
  8. 技术的力量:如何用数据驱动实现设备健康管理
  9. 使用Hilt搭建隔离层架构
  10. 视频加字幕怎么做?分享几种视频加字幕方法