闲鱼上哪些商品抢手?Python 分析后告诉你
目 标 场 景
经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的收入。
闲鱼上大量的商品,很难精准判断哪些受欢迎,哪些好卖;一个个录入数据去做数据分析,浪费时间的同时,效率也极其的低效。
本篇文章的目的是利用 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 分析后告诉你相关推荐
- 为什么闲鱼不能搜索python_闲鱼上哪些商品抢手?Python 分析后告诉你
原标题:闲鱼上哪些商品抢手?Python 分析后告诉你 阅读文本大概需要 10 分钟. 1 目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的睡后收入. 闲鱼 ...
- 第十八期:闲鱼上哪些商品抢手?Python分析后告诉你
经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的 睡后收入. 作者:星安果 1.目标场景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的睡后收 ...
- Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~
前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pyecharts模块: 以及一些Py ...
- 为什么闲鱼不能搜索python_Python 分析后告诉你闲鱼上哪些商品抢手?
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...
- #私藏项目实操分享#Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~
前言 利用利用Python 自动化来获取某类商品中最好卖的商品以供参考.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pyecharts模块: 以及一些Pyt ...
- 抓球球的机器人应该怎么玩_闲鱼2019年应该怎么玩?闲鱼上面的几大规则
闲鱼2019年应该怎么玩?闲鱼上面的几大规则 如今已经是2019年了,还是有好一些的伙伴们在求闲鱼流量,闲鱼新的一年是不是有什么大的改动,还可以照着往年的玩法继续做闲鱼吗,对于这样的问题,我实在有些看 ...
- 小家电的精致生活幻想,都在闲鱼上被粉碎了
本文经授权转载自公众号"DT财经" ID | DTcaijing 作者 | 何书瑶 24岁的钟白是个不折不扣的新媒体社畜,但996的生活并没有打消她"精致生活" ...
- 闲鱼怎么发布宝贝引流?推广方法就是不断的在闲鱼上发布转让
闲鱼怎么发布宝贝引流?推广方法就是不断的在闲鱼上发布转让 哥们说他们三个都是学生,以前是学校计算机协会的,大家都是崇尚自由的人,毕业以后不想去给别人打工,于是就自己单干,他们的货源就是快要倒闭的网吧, ...
- 在闲鱼上卖什么东西比较赚钱?
在闲鱼上卖什么东西比较赚钱?这牵扯做闲鱼的一个关键问题:选品.可以这么说,会选品,选好品,就成功了一半.剩下的一半,一半交给技术,另一半交给运气. 怎么选品?要遵循下面几个原则: 第一,做实物,但不要 ...
最新文章
- 神经网络反向传播梯度计算数学原理
- angular 引入编辑器以及控制器的学习和理解。。。
- OpenStack行业实践和发展趋势
- P2796-Facer的程序【dp】
- linux下硬盘测速工具hdparm
- 页面css样式找不到问题
- 数字式轮胎气压计行业调研报告 - 市场现状分析与发展前景预测
- Redis的持久化 RDB AOF
- C++基础——bitset与string的相互转化
- Python3.6 所有内置函数
- Putty连接TPYBorad v102 开发板教程
- Boost Thread 编程指南、Boost线程入门教程
- java爬虫实例_Java爬虫完整实例源码
- xvidcore交叉编译
- geoJson全国各省市地图json数据获取
- Java 模拟新浪登录 2016
- 【基础】一叶知秋,从背包问题到动态规划
- MATLAB怎么生成一个周期信号,matlab产生方波脉冲和周期性方波信号
- javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)
- Express文件表单解析中间件 Multer简介