前提條件
需要事先安裝requests
模塊:
pip install requests
放碼過來
import requestsurl = 'XXX' #文件下載來源URL
filename = '' #下載到本地后新文件名
r = requests.get(url)
with open(filename, "wb") as code:code.write(r.content)
實戰演習
從目標URL大電影雙語閱讀.星際穿越 Interstellar (贈英文音頻與單詞隨身查APP)下載音頻文件。
通過瀏覽器后臺分析,可找到音頻的URL。
其實通過瀏覽器自帶下載功能,應該很容易下載到本地。
但是,屢試不行。
于是,尋思著,同一瀏覽器,同樣請求URL,為何卻得不到想要的結果?
嘗試在地址欄輸入音頻的URL。
Access Denied, You are denied by bucket referer policy.
看到被拒的信息后,聯想到會不會是請求頭的緣故呢?
于是,瀏覽器后臺查找音頻URL的請求頭。
有可能是下載器發出請求時沒要帶上Referer
等參數而被拒絕連接。
是時候發揮Python的強大功力了,在請求下載時請求頭帶上Referer
等參數。
headers={"Referer": "http://www.ecustpress.cn/erweima/player.html?blid=11089","Accept-Encoding":"identity;q=1, *;q=0","User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36","Range":"bytes=0-"
}res = requests.get(url % (i + 1), headers=headers)
另外還發現,目標URL中的所有音頻URL尾有很明顯的規律:1.mp3、2.mp3、3.mp3…、37.mp3。
于是,一鼓作氣將它們下載到本地。
綜上所述,最終代碼:
import requests
import os
import time
import randomurl = "http://hldqrcode1.oss-cn-shanghai.aliyuncs.com/wapaudio/56474/%d.mp3"headers={
"Referer": "http://www.ecustpress.cn/erweima/player.html?blid=11089",
"Accept-Encoding":"identity;q=1, *;q=0",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"Range":"bytes=0-"
}for i in range(37):fileName = ("0" if i + 1 < 10 else "") + ("%d.mp3" % (i + 1))if os.path.exists(fileName):continueprint "Download %s" % fileNametry:res = requests.get(url % (i + 1), headers=headers)with open(fileName, "wb") as code:code.write(res.content)time.sleep(10 * random.random())except Exception as err:print "Something wrong happens when downloading %s" % fileNameprint err
碼到功成!
參考資料
-
python下載文件的三種方法
-
Python——爬蟲【Requests設置請求頭Headers】