問題背景
先介紹一個練習英語聽力的好網站https://learningenglish.voanews.com/,有針對不同聽力需求的部分,也有每天30分鐘的broadcast,可以幫助我們沉侵式練習聽力。是美語播音員,切速度比較慢,適合學習者練習。也有一部分視頻教程,個人覺得不錯,推薦給大家。(有個不好地方就是該網站需要通過代理訪問)
在用的過程中有一個問題,就是我每次都是在線聽。如果想在手機上聽就比較麻煩,所以想能不能下載下來,但是又覺得一個一個去點擊下載太麻煩了。於時就決定寫個python程序幫我下載,誰叫咱是程序員呢。花了一下午,寫出來,現在分享給大家。
我們的工具要實現哪些功能?
- 下載mp3文件從上面提到的網站;
- 下載所有設定日期內的broadcast mp3文件;
- 支持在命令行傳入起始和截至日期,比如20190101 20190530;
- 如果命令行傳入一個日期則該日期作為起始日期,當天時間作為截至日期;
- 如果命令行沒傳入日期,則下載上一次到當天之間的mp3,若沒有上一次的時間則只下載當天的mp3文件;
怎麼實現呢?
- 解析參數,確定下載的日期,並存入list;
- 將下載日期和下載鏈接進行拼接,構成下載鏈接;
- 如果鏈接合法,則下載,否則以日期名為名創建txt文件並將下載鏈接存入其內;
- 保存當天日期;
先看看完成後的運行效果
測試中我只想下載本月的,所以輸入參數如下
python .\auto-download-voa-broadcast.py 20190601
現在看一些關鍵的難點,需要完整源碼的可以私信
先需要解析下載地址,先手動找到一個下載地址http://av.voanews.com/clips/VLE/2019/06/15/20190615-003000-VLE122-program_hq.mp3?download=1,就是這樣子的,可以看出其中包含了2019/06/15/20190615這樣的字符串,我可以推測任意一天的下載地址就是其他固定字符串加日期即可。隨機找一天驗證,發現確實如此,那就簡單了。不需要去爬蟲了。
- 下載過程,由於每個文件約30MB,所以下載需要持續幾秒(當然跟網絡也有關係)
def download_file(file_url, file_name):
"""
downdload file
"""
#這裡的stream=True很重要,支持流下載, proxies=需要改為自己的代理
with requests.get(file_url, stream=True, proxies=None) as response, open(file_name, 'wb') as local_file:
shutil.copyfileobj(response.raw, local_file)
- 代理的設置,將下面的url和port設置為自己的,然後將其賦值給上面的proxies即可
http_proxies = {'http':'http://url:port'}
- 我們會用到下面的庫
import shutil, datetime, shelve, time, sys, os
import requests
- 再一個就是入參日期有效性的判斷
def is_valid_data(date_str):
"""Check if date string is valid"""
try:
time.strptime(date_str, "%Y%m%d")
return True
except:
return False
小結
總體來說,思路比較簡單,就是將要下載的日期構造成下載鏈接,然後逐個下載。Python是個很好的語言,能夠極大幫助我們節省開發時間。學以致用才是王道。這也是編程的樂趣所在吧。
關於源碼
如果有感興趣的可以私信,我可發送完整源碼。加個關注,說不定哪天能夠分享出對您有用的東東。
相關推薦
'用Python控制Excel實現自動化辦公!附全套學習教程'
"1.安裝2.操作一個簡單的Excel文檔操作註釋及代碼:操作完成後,數據存儲結果如下:3. 操作簡單Excel文檔並添加數據格式操作代碼如下:附帶數據格式的定義操作效果如圖所示:4.Excel中添加不同類型的數據操作代碼如下:將不同的數據按照指定的格式添加到文件中代碼執行...
'為啥子這麼多人開始學Python?看完這些你就清楚了'
"Python具有豐富和強大的庫。它常被暱稱為膠水語言,能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕鬆地聯結在一起。在小編看來,基本上可以負責任地認為,Python 可以做任何事情。無論是從入門級選手到專業級數據挖掘、科學計算、圖像處理、人工智能,Python 都...
'3年級:家長用1份課件為孩子英語啟蒙,老師都驚歎孩子英語學習好'
"3年級:家長用1份課件為孩子英語啟蒙,老師都驚歎孩子英語學習好老師,我家孩子英語不好。老師,我孩子不願學英語。怎麼辦?為什麼別人家的孩子英語就那麼好?很多家長和我交流,說孩子的英語成績一塌糊塗。其實,除了學校的老師要認真教,家長也要幫孩子學習,畢竟我們不能指望幾歲的孩子主...
'邊玩邊學Python編程,這12款遊戲輕鬆掌握Python,直接做項目'
"你還在堅持Python編程嗎?如此枯燥的學習方式,靠自己的意志真的能堅持到最後嗎?放棄吧!與其辛苦的執著,不如看美國大佬推薦的Python編程闖關遊戲,一邊學編程一邊玩遊戲,以後連“吃雞”的時間都用來學Python編程。他們正在通過遊戲來擴展世界的代碼識字率,通過創造最有...
'用Python處理了數據還要導入Excel做圖表?直接Python做漂亮圖表'
"請關注本號,後續會有更多相關教程。轉發本文並私信我"python",即可獲得按水平領域分類好的Python資料系列文章"替代Excel Vba"系列(一):用Python的pandas快速彙總"Python替代Excel Vba"系列(二):pandas分組統計與操作Ex...
'學習Python細分化為這12個階段,各階段思維導圖助你輕鬆學Python'
"分12個階段學習Python,各個階段思維導圖奉上,這樣你還學不會?學習Python細分化為這12個階段,各階段思維導圖助你輕鬆學Python:1.Python 解釋器:2.Python數據結構:3.變量與運算符:4.Python 流程控制:5.Python 文件處理:6...
'零基礎玩遊戲學python(5)真名實姓'
"#5. 真名實姓關卡概覽和解法掌握一名敵人的真實姓名來擊敗它。簡介闖關學習地址:https://www.codewar.cn/play/dungeon(複製到瀏覽器打開)確保攻擊每個食人魔兩次。使用attack方法來根據名字("Name")發起攻擊。大小寫很重要!默認代碼...
推薦中...