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

原标题:闲鱼上哪些商品抢手?Python 分析后告诉你

31178a068a83d047a2c737322b8d78c8.png

阅读文本大概需要 10 分钟。

1

目 标 场 景

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

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

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

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

2

准 备 工 作

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

1、 配置好 Android ADB 开发环境

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

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

# pocoui

pip3 installpocoui

# 数据可视化图表

pip3 installpyecharts -U

3

编 写 代 码

我们分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( '进入闲鱼主界面')

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

# 如果指定时间内内有淘口令,就关闭

fori inrange( 10, -1, -1):

close_element = self.poco( 'com.taobao.idlefish:id/ivClose')

ifclose_element.exists:

close_element.click

break

time.sleep( 1)

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

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

ad307c08bc936aa217476e8d549f3a72.png

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

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)

# 点击搜索按钮

whileTrue:

# 等待检索结果列表出现

ifnotself.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')

ifwant_element_parent.exists:

# 想要数/已付款数目

want_element = want_element_parent.children[ 0]

want_content = want_element.get_text

# 过滤掉【已付款】等其他商品,只保留个人发布商品

if'人想要'notinwant_content:

continue

# 拿到商品想要的具体数目,代表商品热度

want_num = get_num(want_content)

ifint(want_num) < self.num_assign:

# print('不达标,过滤掉')

pass

else:

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

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

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

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

f31dfe3d3fcdffda9c32bfb03ce16d09.png

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

# 点击更多

whileTrue:

ifself.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步,写入商品、排序并统计数据。

0f632052ffa0e454016903b56ab02194.png

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

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

def__sort_result(self):

"""

对爬取的结果进行排序

:return:

"""

reader = csv.reader(open(self.file_path), delimiter= ",")

# 头部标题

head_title = next(reader)

# 按照第二列进行逆序排列

sortedlist = sorted(reader, key= lambdax: (int(x[ 1])), reverse= True)

# 写入头部数据

write_to_csv(self.file_path, [(head_title[ 0], head_title[ 1], head_title[ 2])], False)

forvalue insortedlist:

write_to_csv(self.file_path, [(value[ 0], value[ 1], value[ 2])], False)

returnsortedlist

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

defdraw_image(self, sortedlist):

"""

画图

:param sortedlist:

:return:

"""

# 标题列表

titles = []

# 销量

sales_num = []

# 拿到爬取结果的标题、销量两个列表

withopen(self.file_path, 'r') ascsvfile:

# 读取文件

reader = csv.DictReader(csvfile)

# 加入列表中

forrow inreader:

titles.append(row[ 'title'])

sales_num.append(row[ 'num'])

# 数目限制

iflen(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# 爬取时间(秒)

4

结 果 结 论

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

0a754f7d760d39712ec2639a2f3cce39.png

我已经将全部源码上传到后台,关注公众号后回复「卖东西」即可获得下载链接。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

需要本篇源码的可以,如下获取:

1.扫描下面的公众号(非本公众号)

2.输入:卖东西

爆款文案

点这里,获取新手福利返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值