日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
閑魚上哪些商品搶手?Python分析后告訴你

1.目標場景

經(jīng)??吹接信笥言陂e魚賣些小東西又或是自己擅長的一些技能,都能為他們帶來不錯的睡后收入。

閑魚上大量的商品,很難精準判斷哪些受歡迎,哪些好賣;一個個錄入數(shù)據(jù)去做數(shù)據(jù)分析,浪費時間的同時,效率也極其的低效。

本篇文章的目的是利用 Python 自動化 來獲取某類商品中很好賣的商品以供參考。

ps:本文僅限用于技術交流,請勿用于其他用途。

2.準備工作

在編寫代碼之前,需要做如下準備工作:

(1)配置好 Android ADB 開發(fā)環(huán)境

(2)Python 虛擬環(huán)境內(nèi)安裝 pocoui 依賴庫

(3)安裝數(shù)據(jù)可視化依賴庫 pyecharts

 
 
 
 
  1. # pocoui 
  2. pip3 install pocoui 
  3.  
  4. # 數(shù)據(jù)可視化圖表 
  5. pip3 install pyecharts -U 

3.編寫代碼

我們分 7 個步驟來實現(xiàn)這個功能,分別是:打開目標應用客戶端、檢索關鍵字到商品列表界面、計算優(yōu)秀滑動距離、篩選商品、獲取商品鏈接地址、寫入文件排序并統(tǒng)計商品、配置參數(shù)。

第 1 步,使用 pocoui 自動化打開目標應用。

 
 
 
 
  1. def __pre(self): 
  2.     """ 
  3.     準備工作 
  4.     :return: 
  5.     """ 
  6.     home() 
  7.     stop_app(package_name) 
  8.     start_my_app(package_name, activity) 
  9.  
  10.  
  11.     # 等待到達桌面 
  12.     self.poco(text='閑魚').wait_for_appearance() 
  13.     self.poco(text='魚塘').wait_for_appearance() 
  14.     self.poco(text='消息').wait_for_appearance() 
  15.     self.poco(text='我的').wait_for_appearance() 
  16.  
  17.     print('進入閑魚主界面') 

進入到閑魚首頁之后,應用端會拿到剪切板的數(shù)據(jù),當存在特定規(guī)律的口令的時,會立馬彈出一個對話框,因此需要模擬關閉對話框的操作。

 
 
 
 
  1. # 如果指定時間內(nèi)內(nèi)有淘口令,就關閉 
  2. for i in range(10, -1, -1): 
  3.       close_element = self.poco('com.taobao.idlefish:id/ivClose') 
  4.       if close_element.exists(): 
  5.             close_element.click() 
  6.             break 
  7.       time.sleep(1) 

打開應用之后,就可以進行第 2 步操作了。

通過要檢索的關鍵字,模擬輸入到輸入框內(nèi),然后點擊搜索按鈕,一直等待搜過列表出現(xiàn)為止。

另外,為了更加方便地處理數(shù)據(jù),商品列表切換到列表模式,即一行只顯示一個商品。

 
 
 
 
  1. def __input_key_word(self): 
  2.     """ 
  3.     輸入關鍵字 
  4.     :return: 
  5.     """ 
  6.     # 進入搜索界面 
  7.     perform_click(self.poco('com.taobao.idlefish:id/bar_tx')) 
  8.  
  9.     # 搜索框內(nèi)輸入文本 
  10.     self.poco('com.taobao.idlefish:id/search_term').set_text(self.good_msg) 
  11.  
  12.     # 點擊搜索按鈕 
  13.     while True: 
  14.          # 等待檢索結果列表出現(xiàn) 
  15.          if not self.poco('com.taobao.idlefish:id/list_recyclerview').exists(): 
  16.               perform_click(self.poco('com.taobao.idlefish:id/search_button', text='搜索')) 
  17.          else: 
  18.               break 
  19.  
  20.     # 等待商品列表完全出現(xiàn) 
  21.     self.poco('com.taobao.idlefish:id/list_recyclerview').wait_for_appearance() 
  22.  
  23.     # 切換到列表 
  24.     perform_click(self.poco('com.taobao.idlefish:id/switch_search')) 

第 3 步,計算優(yōu)秀滑動距離。

為了保證爬取數(shù)據(jù)的高效性,獲取計算出每次滑動的優(yōu)秀距離。

首先先拿到當前界面的 UI 控件樹,然后通過控件的屬性 ID 拿到商品的坐標,進而得到每一項商品的高度。

最后,通過觀察屏幕中出現(xiàn)商品的數(shù)目得到優(yōu)秀滑動距離。

 
 
 
 
  1. def __get_good_swipe_distance(self): 
  2.     """ 
  3.     獲取每次滑動,最合適的距離 
  4.     :return: 
  5.     """ 
  6.     element = Element() 
  7.     # 保存當前的UI樹到本地 
  8.     element.get_current_ui_tree() 
  9.  
  10.     # 第一個商品Item的坐標 
  11.     position_item = element.find_elment_position_by_id_and_index("com.taobao.idlefish:id/card_root", 
  12.                                                                      "1") 
  13.     # 商品的高度 
  14.     item_height = position_item[1][1] - position_item[0][1] 
  15.  
  16.     # 通過觀察,當前屏幕有3件商品 
  17.     return item_height * 3 

第 4 步,篩選商品。

上面的步驟拿到優(yōu)秀的滑動距離,不停的滑動頁面遍歷列表元素的子 Item。

需要注意的是,為了避免滑動慣性導致的誤差,每一次的滑動時長最好設置為 2s 以上。

通過商品 Item 篩選出想要數(shù)目大于預設數(shù)字的商品。

 
 
 
 
  1. # 多少人想要 
  2. want_element_parent = item.offspring('com.taobao.idlefish:id/search_item_flowlayout') 
  3.  
  4. if want_element_parent.exists(): 
  5.      # 想要數(shù)/已付款數(shù)目 
  6.      want_element = want_element_parent.children()[0] 
  7.  
  8.      want_content = want_element.get_text() 
  9.  
  10.      # 過濾掉【已付款】等其他商品,只保留個人發(fā)布商品 
  11.      if '人想要' not in want_content: 
  12.             continue 
  13.  
  14.       # 拿到商品想要的具體數(shù)目,代表商品熱度 
  15.       want_num = get_num(want_content) 
  16.  
  17.       if int(want_num) < self.num_assign: 
  18.              # print('不達標,過濾掉') 
  19.              pass 
  20.       else: 
  21.             # 商品想要數(shù)達標,加入統(tǒng)計 

第 5 步,獲取商品鏈接地址。

對于上一步滿足條件的商品,點擊商品 Item 進入到商品詳情頁面。

接著點擊右上角的分享按鈕,會立即彈出分享對話框。

然后點擊口令控件,會提示口令復制到系統(tǒng)剪切板成功。

 
 
 
 
  1. # 點擊更多 
  2. while True: 
  3.      if self.poco('com.taobao.idlefish:id/ftShareName').exists(): 
  4.           break 
  5.      print('點擊更多~') 
  6.      perform_click(self.poco(text='更多')) 
  7.  
  8. # 點擊復制淘口令 
  9. perform_click(self.poco('com.taobao.idlefish:id/ftShareName', text='淘口令')) 
  10.  
  11. # 拿到口令碼 
  12. taobao_code_element = self.poco('com.taobao.idlefish:id/tvWarnDetail') 
  13.  
  14. taobao_code = taobao_code_element.get_text()      

第 6 步,寫入商品、排序并統(tǒng)計數(shù)據(jù)。

將上面獲取到的商品標題、想要數(shù)、分享地址寫入到 CSV 文件中。

然后讀取數(shù)據(jù)文件,通過對表格中的第二列進行反向排序,使商品按照想要數(shù)進行降序排列。

 
 
 
 
  1. def __sort_result(self): 
  2.     """ 
  3.     對爬取的結果進行排序 
  4.     :return: 
  5.     """ 
  6.     reader = csv.reader(open(self.file_path), delimiter=",") 
  7.  
  8.     # 頭部標題 
  9.     head_title = next(reader) 
  10.  
  11.     # 按照第二列進行逆序排列 
  12.     sortedlist = sorted(reader, key=lambda x: (int(x[1])), reverse=True) 
  13.  
  14.     # 寫入頭部數(shù)據(jù) 
  15.     write_to_csv(self.file_path, [(head_title[0], head_title[1], head_title[2])], False) 
  16.  
  17.     for value in sortedlist: 
  18.        write_to_csv(self.file_path, [(value[0], value[1], value[2])], False) 
  19.  
  20.     return sortedlist 

最后拿到前 10 項數(shù)據(jù),利用 pyecharts 生成統(tǒng)計圖表。

 
 
 
 
  1. def draw_image(self, sortedlist): 
  2.      """ 
  3.      畫圖 
  4.      :param sortedlist: 
  5.      :return: 
  6.      """ 
  7.  
  8.      # 標題列表 
  9.      titles = [] 
  10.  
  11.      # 銷量 
  12.      sales_num = [] 
  13.  
  14.      # 拿到爬取結果的標題、銷量兩個列表 
  15.      with open(self.file_path, 'r') as csvfile: 
  16.          # 讀取文件 
  17.          reader = csv.DictReader(csvfile) 
  18.  
  19.          # 加入列表中 
  20.          for row in reader: 
  21.              titles.append(row['title']) 
  22.              sales_num.append(row['num']) 
  23.  
  24.      # 數(shù)目限制 
  25.      if len(titles) > self.num: 
  26.          titles = titles[:self.num] 
  27.          sales_num = sales_num[:self.num] 
  28.  
  29.      # 畫圖 
  30.      bar = ( 
  31.             Bar() 
  32.                 .add_xaxis(titles) 
  33.                 .add_yaxis("哪些好賣", sales_num) 
  34.                 .set_global_opts(title_opts=opts.TitleOpts(title="我要賣貨")) 
  35.         ) 
  36.      bar.render('%s.html' % self.good_msg) 

第 7 步,配置參數(shù)。

編寫 yaml 文件,指定要爬取商品的關鍵字、爬取時間、想要數(shù)考核指標數(shù)、篩選商品數(shù)目。

 
 
 
 
  1. goods: 
  2.   # 搜索商品1,包含搜索關鍵字、爬取時間 
  3.   good1: 
  4.     key_word: '資料'   # 搜索關鍵字 
  5.     key_num: 100  # 篩選【想要數(shù)】的臨界點 
  6.     num: 10      # 只篩選爆款 
  7.     time: 600   # 爬取時間(秒) 

4.結果結論

提前配置好商品關鍵字、爬取時間等參數(shù),即可以爬取到符合要求的、最好賣的商品數(shù)據(jù),最終以圖表的方式展示出來。


網(wǎng)站標題:閑魚上哪些商品搶手?Python分析后告訴你
地址分享:http://www.5511xx.com/article/cojsojp.html