300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python爬虫实战 pyecharts模块 Python数据分析告诉你闲鱼上哪些商品抢手~

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

时间:2020-06-26 15:52:45

相关推荐

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

前言

利用利用Python 自动化来获取某类商品中最好卖的商品以供参考。废话不多说。

让我们愉快地开始吧~

开发工具

Python版本:3.6.4

相关模块:

pyecharts模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

准备工作

1、配置好 Android ADB 开发环境

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

#pocoui\pip3installpocoui#数据可视化图表pip3installpyecharts-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('进入闲鱼主界面')复制代码

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

#如果指定时间内内有淘口令,就关闭\foriinrange(10,-1,-1):\close_element=self.poco('com.taobao.idlefish:id/ivClose')\ifclose_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)#点击搜索按钮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件商品returnitem_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('不达标,过滤掉')passelse:#商品想要数达标,加入统计复制代码

5步,获取商品链接地址

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

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

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

#点击更多whileTrue:ifself.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=lambdax:(int(x[1])),reverse=True)#写入头部数据write_to_csv(self.file_path,[(head_title[0],head_title[1],head_title[2])],False)forvalueinsortedlist:write_to_csv(self.file_path,[(value[0],value[1],value[2])],False)returnsortedlist复制代码

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

defdraw_image(self,sortedlist):"""画图:paramsortedlist::return:"""#标题列表titles=[]#销量sales_num=[]#拿到爬取结果的标题、销量两个列表withopen(self.file_path,'r')ascsvfile:#读取文件reader=csv.DictReader(csvfile)#加入列表中forrowinreader: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#爬取时间(秒)复制代码

效果展示

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。