先介紹一個(gè)練習英語(yǔ)聽(tīng)力的好網(wǎng)站https://learningenglish.voanews.com/,有針對不同聽(tīng)力需求的部分,也有每天30分鐘的broadcast,可以幫助我們沉侵式練習聽(tīng)力。是美語(yǔ)播音員,切速度比較慢,適合學(xué)習者練習。也有一部分視頻教程,個(gè)人覺(jué)得不錯,推薦給大家。(有個(gè)不好地方就是該網(wǎng)站需要通過(guò)代理訪(fǎng)問(wèn))
在用的過(guò)程中有一個(gè)問(wèn)題,就是我每次都是在線(xiàn)聽(tīng)。如果想在手機上聽(tīng)就比較麻煩,所以想能不能下載下來(lái),但是又覺(jué)得一個(gè)一個(gè)去點(diǎn)擊下載太麻煩了。于時(shí)就決定寫(xiě)個(gè)python程序幫我下載,誰(shuí)叫咱是程序員呢?;艘幌挛?,寫(xiě)出來(lái),現在分享給大家。
下載mp3文件從上面提到的網(wǎng)站;
下載所有設定日期內的broadcast mp3文件;
支持在命令行傳入起始和截至日期,比如20190101 20190530;
如果命令行傳入一個(gè)日期則該日期作為起始日期,當天時(shí)間作為截至日期;
如果命令行沒(méi)傳入日期,則下載上一次到當天之間的mp3,若沒(méi)有上一次的時(shí)間則只下載當天的mp3文件;
解析參數,確定下載的日期,并存入list;
將下載日期和下載鏈接進(jìn)行拼接,構成下載鏈接;
如果鏈接合法,則下載,否則以日期名為名創(chuàng )建txt文件并將下載鏈接存入其內;
保存當天日期;
測試中我只想下載本月的,所以輸入參數如下
最終執行效果圖
先需要解析下載地址,先手動(dòng)找到一個(gè)下載地址http://av.voanews.com/clips/VLE/2019/06/15/20190615-003000-VLE122-program_hq.mp3?download=1,就是這樣子的,可以看出其中包含了2019/06/15/20190615這樣的字符串,我可以推測任意一天的下載地址就是其他固定字符串加日期即可。隨機找一天驗證,發(fā)現確實(shí)如此,那就簡(jiǎn)單了。不需要去爬蟲(chóng)了。
下載過(guò)程,由于每個(gè)文件約30MB,所以下載需要持續幾秒(當然跟網(wǎng)絡(luò )也有關(guān)系)
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即可
我們會(huì )用到下面的庫
import shutil, datetime, shelve, time, sys, osimport requests
再一個(gè)就是入參日期有效性的判斷
總體來(lái)說(shuō),思路比較簡(jiǎn)單,就是將要下載的日期構造成下載鏈接,然后逐個(gè)下載。Python是個(gè)很好的語(yǔ)言,能夠極大幫助我們節省開(kāi)發(fā)時(shí)間。學(xué)以致用才是王道。這也是編程的樂(lè )趣所在吧。
聯(lián)系客服