请为什么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)
阅读 7.2k
2 个回答

文件名引起的,你换个别的文件名,最好不要带:的。

我发现是你没有命名文件名的错误,准确说叫文件类型 :

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)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题