<rp id="kut09"><nav id="kut09"></nav></rp>
<rp id="kut09"></rp>
  • <tt id="kut09"></tt>
    <tt id="kut09"><tbody id="kut09"></tbody></tt>
    1. <u id="kut09"></u>
    2. <tt id="kut09"><noscript id="kut09"></noscript></tt>
    3. 用python批量下載apk

       更新時間:2020年12月29日 10:48:25   作者:武散人  
      這篇文章主要介紹了用python批量下載apk的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

      案例故事:

      之前我們做Android手機測試的時候,

      市場部希望我們測試部進行Top 1000 app(排名前1000的app)的兼容性測試,
      以確保我們的手機是可以安裝并正常運行這么多好用的app,
      且市場部提供了某應用市場上的top 1000 的apk下載地址。

      如何實現快速批量地下載apk文件呢?

      準備階段

      以上excel里的的url分明是需要進行二次重定向的,因為其不是一個.apk結尾的鏈接,
      我們需要進行解析后再進行重定向。wget命令是不支持這url重定向解析的,所以不能采用。
      所以我們還是采用requests模塊來實現下載。

      Python批處理腳本形式 單線程的寫法

      記住批處理腳本的精髓:批量順序執行語句,
      由于批處理腳本形式只能實現單個apk的下載任務,我們使用requests模塊實現下載。
      單線程效率比較慢,必須等前一個apk下載完畢后,才會開始后一個apk的下載。

      # coding=utf-8
      
      import os
      import requests
      import openpyxl
      
      curdir = os.getcwd() # 獲取當前路徑current work directory
      header = {
       'User-Agent': 'Mozilla/5.0 (Windows NT 6.1 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36'}
      
      # 創建文件夾用于存放已經下載的apk
      if not os.path.exists("downloaded_apk"):
       os.system("mkdir downloaded_apk")
      
      # 逐行讀取excel里的下載地址url
      excel = openpyxl.load_workbook('Top_1000_app.xlsx') # 讀取excel里邊的內容
      table = excel.active
      rows = table.max_row
      for r in range(2, rows + 1): # 跟excel的第一行標題行無關,從第二行文字內容開始
       apk_name = table.cell(row=r, column=2).value # 獲取app名字(中文)
       apk_url = table.cell(row=r, column=3).value # 獲取下載地址
       save_path = os.path.join(curdir, "downloaded_apk", "%s.apk" % apk_name)
       if not os.path.exists(save_path): # 避免二次下載
        print("Downloading the %sth apk and will save to %s" % (r, save_path))
        try:
         r = requests.get(apk_url, headers=header, allow_redirects=True, timeout=720) # 發起requests下載請求
         status_code = r.status_code
         if (status_code == 200 or status_code == 206):
          with open(save_path, "wb") as hf:
           hf.write(r.content)
        except:
         print("Error, can not download %s.apk" % apk_name)
       else:
        print("%s downloaded already!" % save_path)
      
      os.system("pause")
      
      
      

      Python面向對象類形式 多線程下載的寫法

      準備階段

      多線程一般效率快很多很多,
      多線程任務執行,一般是將apk下載任務放到Queue隊列里去,先進先出,
      然后只要隊列不是空隊列,就從隊列里邊取任務(q_job),并有10個線程同時進行,
      相對來說,理解上會較難一些些,但是掌握后,可以快速提高下載效率。

      #coding=utf-8
      
      import os
      import queue
      import threading
      import requests
      import openpyxl
      
      curdir = os.getcwd() #獲取當前路徑current work directory
      header = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36'}
      
      # 創建文件夾
      if not os.path.exists("downloaded_apk"):
       os.system("mkdir downloaded_apk")
      
      
      def download_single_apk(apk_url_str):
       '''下載單個apk文件'''
       apk_name, apk_url = apk_url_str.split(";")
       # print(apk_url)
       save_path = os.path.join(curdir, "downloaded_apk", "%s.apk" % apk_name)
       if not os.path.exists(save_path): # 避免二次下載
        print("Downloading %s" % (save_path))
        try:
         r = requests.get(apk_url, headers=header, allow_redirects=True, timeout=720) # 發起requests下載請求
         status_code = r.status_code
         if (status_code == 200 or status_code == 206):
          with open(save_path, "wb") as hf:
           hf.write(r.content)
        except:
         print("Error, can not download %s.apk" % apk_name)
       else:
        print("%s downloaded already!" % save_path)
      
      
      # 批量下載的線程
      class DownLoadThread(threading.Thread):
       def __init__(self, q_job):
        self._q_job = q_job
        threading.Thread.__init__(self)
      
       def run(self):
        while True:
         if self._q_job.qsize() > 0:
          download_single_apk(self._q_job.get()) # 這是10個線程都運行這個下載函數
         else:
          break
      
      
      if __name__ == '__main__':
       # 初始化一個隊列
       q = queue.Queue(0)
       
       # 逐行讀取excel里的url
       excel = openpyxl.load_workbook('Top_1000_app.xlsx') # 讀取excel里邊的內容
       table = excel.active
       rows = table.max_row
       for r in range(2, rows + 1): # 跟excel的第一行標題行無關,從第二行文字內容開始做替換工作
        apk_name = table.cell(row=r, column=2).value # 獲取app名字(中文)
        apk_url = table.cell(row=r, column=3).value # 獲取下載地址
        temp_str = apk_name + ";" + apk_url # 不可以put列表進隊列,只能嘗試put字符串
        q.put(temp_str) 
       
       for i in range(10): # 開啟10個線程
        DownLoadThread(q).start()
      

      本案例素材下載

      點我下載

      運行方式與效果

      比如保存以上代碼為download_1000apk.py并放在桌面,
      建議python download_1000apk.py運行,當然也可以雙擊運行。
      運行效果如下:

      以上就是用python批量下載apk的詳細內容,更多關于python批量下載apk的資料請關注腳本之家其它相關文章!

      相關文章

      最新評論

      218彩票 www.hi-fiaudio.com:瓦房店市| www.howtowriteanad.com:常德市| www.qs655.com:大英县| www.mugua668.com:房产| www.silviatenenti.com:昌黎县| www.qqrbc.com:渭源县| www.patrickcoxdna.com:湄潭县| www.doxycyclin.net:上饶县| www.hearthemlive.com:沾化县| www.vintage-denim.com:驻马店市| www.xianglinhe.com:尉犁县| www.b-ads.com:石狮市| www.wnwgj.com:烟台市| www.2dfloorplan.com:司法| www.jmin00.com:军事| www.testsite02.com:昭觉县| www.choco-loco-net.com:文安县| www.stonedz.com:额尔古纳市| www.northcountybjj.com:宁乡县| www.lainiyin.com:额敏县| www.686684.com:陆良县| www.discussfood.com:宜宾市| www.dalicun.com:象山县| www.tuhai023.com:仙游县| www.hg28678.com:雅安市| www.hairbook.org:枣强县| www.cp7713.com:临高县| www.desiessence.com:水富县| www.ghyakeli.com:荃湾区| www.bzslc.com:安庆市| www.ossean.com:沽源县| www.debbiesellsredding.com:牟定县| www.greenitways.com:中牟县| www.potap-nastya.net:永福县| www.8ckc.com:铜陵市| www.altbremerton.com:兴海县| www.coimbratrail.com:巴彦县| www.cbearings.com:佛山市| www.oxbtest.com:独山县| www.joikoi.com:夹江县| www.medianewslive.com:拉萨市| www.submitbookmarkingsites.com:清水县| www.wentiangouwu.com:卓资县| www.bjzhaoming.com:哈尔滨市| www.e-young2009.com:茶陵县| www.bigbanganimation.com:南川市| www.medianewslive.com:云梦县| www.torrezanefelipe.com:谷城县| www.hidprovisionplus.net:山阴县| www.daotaolaptop.com:云梦县| www.mathtuition.org:小金县| www.abc-telecom.com:斗六市| www.beverlysteelasia.com:浦城县| www.mosmedia.net:长治市| www.helpthehooch.org:自治县| www.ninareviews.com:洛隆县| www.digishoppy.com:台中县| www.kxwzqw.com:南投县| www.gztaiji.cn:营口市| www.cp3320.com:平陆县| www.s7765.com:杨浦区| www.czyxjx.com:泗洪县| www.phoneitipad.com:鄂伦春自治旗| www.all-market.org:彰武县| www.bichengdecoration.com:航空| www.smgtunes.com:蕉岭县| www.qyu3.com:盱眙县| www.olgirl.com:友谊县| www.w-wha.org:中山市| www.pbpnk.com:门头沟区| www.taralynnfoxxblog.com:桓台县| www.oldschoolvans.com:鹿泉市| www.fusion-mania.com:卢氏县| www.bjxdby.com:四会市| www.663074.com:贡觉县| www.jasmineevanscoach.com:景德镇市| www.fam-love.com:保山市| www.998cm.com:绿春县| www.basicherbals.com:大埔区| www.xhjsw.cn:佛教| www.iphonecheckbook.com:南康市| www.qhsjb.com:文水县| www.chuangjiake.com:武邑县| www.b495.com:虞城县|