用Python下载文件
前提條件
需要事先安裝requests模塊:
- pip install requests
放碼過(guò)來(lái)
import requestsurl = 'XXX' #文件下載來(lái)源URL filename = '' #下載到本地后新文件名 r = requests.get(url) with open(filename, "wb") as code:code.write(r.content)實(shí)戰(zhàn)演習(xí)
從目標(biāo)URL大電影雙語(yǔ)閱讀.星際穿越 Interstellar (贈(zèng)英文音頻與單詞隨身查APP)下載音頻文件。
通過(guò)瀏覽器后臺(tái)分析,可找到音頻的URL。
其實(shí)通過(guò)瀏覽器自帶下載功能,應(yīng)該很容易下載到本地。
但是,屢試不行。
于是,尋思著,同一瀏覽器,同樣請(qǐng)求URL,為何卻得不到想要的結(jié)果?
嘗試在地址欄輸入音頻的URL。
Access Denied, You are denied by bucket referer policy.
看到被拒的信息后,聯(lián)想到會(huì)不會(huì)是請(qǐng)求頭的緣故呢?
于是,瀏覽器后臺(tái)查找音頻URL的請(qǐng)求頭。
有可能是下載器發(fā)出請(qǐng)求時(shí)沒(méi)要帶上Referer等參數(shù)而被拒絕連接。
是時(shí)候發(fā)揮Python的強(qiáng)大功力了,在請(qǐng)求下載時(shí)請(qǐng)求頭帶上Referer等參數(shù)。
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)另外還發(fā)現(xiàn),目標(biāo)URL中的所有音頻URL尾有很明顯的規(guī)律: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設(shè)置請(qǐng)求頭Headers】
總結(jié)
以上是生活随笔為你收集整理的用Python下载文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: STL源码剖析 基本算法 < stl_a
- 下一篇: python11_Python11,文件