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

前言

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

让我们愉快地开始吧~

开发工具

Python版本: 3.6.4

相关模块:

pyecharts模块;

以及一些Python自带的模块。

环境搭建

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

准备工作

1、配置好 Android ADB 开发环境

2、Python 虚拟环境内安装 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 步,检索关键字到商品列表界面

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

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

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

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

    element.get_current_ui_tree()

    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]

    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:

             pass
      else:

5 步,获取商品链接地址

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

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

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

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


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

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

将上面获取到的商品标题、想要数、分享地址写入到 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:

  good1:
    key_word: '资料'
    key_num: 100
    num: 10
    time: 600

效果展示

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

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

Original: https://blog.csdn.net/weixin_43649691/article/details/121321653
Author: 小雁子学Python
Title: Python爬虫实战,pyecharts模块,Python数据分析告诉你闲鱼上哪些商品抢手~

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/696550/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球