亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

用python批量下載apk

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

案例故事:

之前我們做Android手機(jī)測(cè)試的時(shí)候,

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

如何實(shí)現(xiàn)快速批量地下載apk文件呢?

準(zhǔn)備階段

以上excel里的的url分明是需要進(jìn)行二次重定向的,因?yàn)槠洳皇且粋€(gè).apk結(jié)尾的鏈接,
我們需要進(jìn)行解析后再進(jìn)行重定向。wget命令是不支持這url重定向解析的,所以不能采用。
所以我們還是采用requests模塊來實(shí)現(xiàn)下載。

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

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

# coding=utf-8

import os
import requests
import openpyxl

curdir = os.getcwd() # 獲取當(dāng)前路徑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'}

# 創(chuàng)建文件夾用于存放已經(jīng)下載的apk
if not os.path.exists("downloaded_apk"):
 os.system("mkdir downloaded_apk")

# 逐行讀取excel里的下載地址url
excel = openpyxl.load_workbook('Top_1000_app.xlsx') # 讀取excel里邊的內(nèi)容
table = excel.active
rows = table.max_row
for r in range(2, rows + 1): # 跟excel的第一行標(biāo)題行無關(guān),從第二行文字內(nèi)容開始
 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) # 發(fā)起requests下載請(qǐng)求
   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面向?qū)ο箢愋问?多線程下載的寫法

準(zhǔn)備階段

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

#coding=utf-8

import os
import queue
import threading
import requests
import openpyxl

curdir = os.getcwd() #獲取當(dāng)前路徑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'}

# 創(chuàng)建文件夾
if not os.path.exists("downloaded_apk"):
 os.system("mkdir downloaded_apk")


def download_single_apk(apk_url_str):
 '''下載單個(gè)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) # 發(fā)起requests下載請(qǐng)求
   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個(gè)線程都運(yùn)行這個(gè)下載函數(shù)
   else:
    break


if __name__ == '__main__':
 # 初始化一個(gè)隊(duì)列
 q = queue.Queue(0)
 
 # 逐行讀取excel里的url
 excel = openpyxl.load_workbook('Top_1000_app.xlsx') # 讀取excel里邊的內(nèi)容
 table = excel.active
 rows = table.max_row
 for r in range(2, rows + 1): # 跟excel的第一行標(biāo)題行無關(guān),從第二行文字內(nèi)容開始做替換工作
  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列表進(jìn)隊(duì)列,只能嘗試put字符串
  q.put(temp_str) 
 
 for i in range(10): # 開啟10個(gè)線程
  DownLoadThread(q).start()

本案例素材下載

點(diǎn)我下載

運(yùn)行方式與效果

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

以上就是用python批量下載apk的詳細(xì)內(nèi)容,更多關(guān)于python批量下載apk的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python給list排序的簡(jiǎn)單方法

    python給list排序的簡(jiǎn)單方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python給list排序的簡(jiǎn)單方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • 基于Python數(shù)據(jù)可視化利器Matplotlib,繪圖入門篇,Pyplot詳解

    基于Python數(shù)據(jù)可視化利器Matplotlib,繪圖入門篇,Pyplot詳解

    下面小編就為大家?guī)硪黄赑ython數(shù)據(jù)可視化利器Matplotlib,繪圖入門篇,Pyplot詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • python中三種輸出格式總結(jié)(%,format,f-string)

    python中三種輸出格式總結(jié)(%,format,f-string)

    在Python語言編程中,我們會(huì)與字符串打交道,那務(wù)必會(huì)輸出字符串來查看字符串的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于python中三種輸出格式的相關(guān)資料,三種格式分別是%,format,f-string,需要的朋友可以參考下
    2022-03-03
  • Python生成器傳參數(shù)及返回值原理解析

    Python生成器傳參數(shù)及返回值原理解析

    這篇文章主要介紹了Python生成器傳參數(shù)及返回值原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python:print格式化輸出到文件的實(shí)例

    python:print格式化輸出到文件的實(shí)例

    今天小編就為大家分享一篇python:print格式化輸出到文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 使用TensorFlow實(shí)現(xiàn)SVM

    使用TensorFlow實(shí)現(xiàn)SVM

    這篇文章主要為大家詳細(xì)介紹了使用TensorFlow實(shí)現(xiàn)SVM的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python 詳解如何寫flask文件下載接口

    python 詳解如何寫flask文件下載接口

    Flask是一個(gè)使用 Python 編寫的輕量級(jí) Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。Flask也被稱為 "microframework" ,因?yàn)樗褂煤?jiǎn)單的核心,用 extension 增加其他功能。Flask沒有默認(rèn)使用的數(shù)據(jù)庫、窗體驗(yàn)證工具
    2021-10-10
  • django中靜態(tài)文件配置static的方法

    django中靜態(tài)文件配置static的方法

    我們可以使用Template 設(shè)置我們的網(wǎng)頁,同時(shí),一個(gè)完美的網(wǎng)頁需要css,js,image 等靜態(tài)文件的支持,這篇文章主要介紹了django中靜態(tài)文件配置static的方法,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python開發(fā)中range()函數(shù)用法實(shí)例分析

    python開發(fā)中range()函數(shù)用法實(shí)例分析

    這篇文章主要介紹了python開發(fā)中range()函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python中range()函數(shù)遍歷列表的相關(guān)技巧,需要的朋友可以參考下
    2015-11-11
  • 如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    如何在Python中利用matplotlib.pyplot畫出函數(shù)圖詳解

    通過圖像可以直觀地學(xué)習(xí)函數(shù)變化、分布等規(guī)律,在學(xué)習(xí)函數(shù)、概率分布等方面效果顯著,下面這篇文章主要給大家介紹了關(guān)于如何在Python中利用matplotlib.pyplot畫出函數(shù)圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08

最新評(píng)論