鍍金池/ 問答/Python  網絡安全/ 請為什么urllib.request.urlretrieve()下載文件都是0k

請為什么urllib.request.urlretrieve()下載文件都是0kb?

我的想法是從url上面利用urllib.request.urlretrieve()遠程下載目標音頻文件,但是為什么文件都是0kb文件,請問有沒有人遇見解決過這個問題能指教一下,謝謝!

clipboard.png

#這是我的源碼:

import requests
import urllib

url = 'http://i.qingting.fm/wapi/channels/82400/programs/2041562/pagesize/10'

#顯示進度
def callbackfunc(blocknum, blocksize, totalsize):
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print('下載進度' + '%.2f%%'% percent)

html = requests.get(url)
for n in range(len(html.json()['data']['programs'])):
    m4aUrl_name = html.json()['data']['programs'][n]['name']
    m4aUrl_path = html.json()['data']['programs'][n]['file_path']
    m4aUrl_path = 'http://od.qingting.fm/' + m4aUrl_path
    urllib.request.urlretrieve(m4aUrl_path, m4aUrl_name, callbackfunc)
回答
編輯回答
我甘愿

我發(fā)現(xiàn)是你沒有命名文件名的錯誤,準確說叫文件類型 :

import requests
import urllib

url = 'http://i.qingting.fm/wapi/channels/82400/programs/2041562/pagesize/10'

#顯示進度
def callbackfunc(blocknum, blocksize, totalsize):
    percent = 100.0 * blocknum * blocksize / totalsize
    if percent > 100:
        percent = 100
    print('下載進度' + '%.2f%%'% percent)

html = requests.get(url)
for n in range(len(html.json()['data']['programs'])):
    m4aUrl_name = html.json()['data']['programs'][n]['name'].split(':')[1]+'.m4a'
    m4aUrl_path = html.json()['data']['programs'][n]['file_path']
    m4aUrl_path = 'http://od.qingting.fm/' + m4aUrl_path
    
    # 這樣下載
    urllib.request.urlretrieve(m4aUrl_path,m4aUrl_name)
    
    # 或者這樣,這個可以解決防爬問題
    # print(m4aUrl_name)
    # mp = requests.get(m4aUrl_path)
    # with open(m4aUrl_name,'wb') as f:
    #     f.write(mp.content)
2018年4月17日 10:25
編輯回答
旖襯

文件名引起的,你換個別的文件名,最好不要帶:的。

2018年8月28日 08:23