前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:【Airpython】

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun

准 备 工 作

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

1、配置好 Android ADB 开发环境

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

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

# pocoui

pip3 install pocoui

# 数据可视化图表

pip3 install pyecharts -U

编 写 代 码

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

第 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()

break

time.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('不达标,过滤掉')

pass

else:

# 商品想要数达标,加入统计

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

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

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

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

# 点击更多

while True:

if self.poco('com.taobao.idlefish:id/ftShareName').exists():

break

print('点击更多~')

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的应用,可以私信小编

原文链接:https://www.cnblogs.com/python0921/p/12587939.html

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

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

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

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

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

  3. 闲鱼上哪些商品抢手?Python 分析后告诉你

    目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的收入. 闲鱼上大量的商品,很难精准判断哪些受欢迎,哪些好卖:一个个录入数据去做数据分析,浪费时间的同时,效率 ...

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

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

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

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

  6. 中国鱼探测仪市场深度研究分析报告

    [报告篇幅]:91 [报告图表数]:144 [报告出版时间]:2021年1月 报告摘要 2019年中国鱼探测仪市场规模达到了XX亿元,预计2026年可以达到XX亿元,未来几年年复合增长率(CAGR)为 ...

  7. 仿闲鱼的搜索历史遇到的一些问题

    在模仿闲鱼的搜索历史中,需要将结果保存在本地,并且有如下要求: ①搜索结果倒序展示,即最新的搜索结果展示在最上边 ②搜索结果不能重复 ③最多存储10条 本地存储需要用到FMDB,先说下其它的 1.使用 ...

  8. 闲鱼关键词搜索列表数据

    #闲鱼关键词搜索接口 描述:闲鱼关键词搜索列表数据 方式: GET 传参说明:keyword: 搜索词:page: 页数: 返回说明: {"api": "cdy.xy.k ...

  9. 如何使用Elasticsearch构建强大的搜索和分析应用程序(2023年最新ES新手教程)

    1.Elasticsearch 非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容 什么是elasticsearch 一个开源的分布式搜索引擎,可以用来实现搜索.日志统计.分析.系统监 ...

最新文章

  1. Dreamweaver 8和visual studio 2003一起开发是很爽的事
  2. 博客群发(2)--实现登陆
  3. MapReduce之RecordWriter理解
  4. JavaScript--动态添加元素
  5. 多线程日记(17.5.3)
  6. 连载三:RobotFramework+Selenium+Jenkins分布式构建
  7. 【转载】Java NIO学习
  8. oracle-约束-序列
  9. ASP.NET读取POP3邮件的操作
  10. FZU1977 Pandora adventure —— 插头DP
  11. Nginx PageSpeed模块配置和使用
  12. 【NLP】统计自然语言处理(第2版)思维导图
  13. 60岁还在写代码的程序员大师,Delphi、C#、TypeScript之父Anders Hejlsberg(安德斯·海尔斯伯格):编程符合10000小时定律
  14. Python之字符编码与文件操作
  15. 求助-强化学习基础-K-摇臂老虎机Python
  16. PHP使用QQ邮箱发送邮件无需SMTP服务器
  17. linux vmware 共享文件夹共享,解决vmware上使用linux虚拟,无法共享文件的问题
  18. 爬取西瓜视频影视分类
  19. 新手第一次用云渲染如何快速上手
  20. 反射型XSS实战演练

热门文章

  1. Python3实现最小栈
  2. python中递归函数写法_python递归函数用法详解
  3. sql 联合查询_一张图看懂sql运行顺序
  4. 用火狐录制脚本为空_功能测试——链接测试amp;脚本功能
  5. java spring注入 静态方法_JAVA静态方法中如何使用spring@Value进行注入的成员变量...
  6. 几何画板200个经典课件_项目制学科联动 | 金芬娥首席工作室:灵动“画板”,研修创新,协同进步...
  7. pat 乙级 1022 D进制的A+B(C++)
  8. 如何判断是不是真正的物理隔离网络光端机
  9. [渝粤教育] 中国地质大学 国际贸易理论 复习题 (2)
  10. 【渝粤教育】广东开放大学 网络市场与预测 形成性考核 (23)