使用Python实现批量下载
起因:需要批量下载音频,懒得手动下
用两天了解 python
- 分析需求
- 设计程序
- 编写代码
- 调试程序
分析需求
实现批量下载音频功能
设计程序
- 请求对象的定制
- 获取响应数据
- 下载文件
请求对象的定制
- 获取 url
url 组成:固定 url + 以毫秒为单位的时间戳 - 获取请求头和请求参数
- 由于是 post 请求,所以必须编码
- 请求对象的定制
- 返回请求对象
获取响应数据
- 模拟浏览器向服务器发送请求
- 获取响应数据
- 返回响应数据
下载文件
- 将字符串转换为json 对象
- 获取整个对象
- 获取下载路径
- 完成下载
import json
import urllib.request
import time
def create_request(page):
url = 'https://appymk8ms6i9430.h5.xiaoeknow.com/column_more_data_v2/column_more_data?' + str(int(time.time()*1000))
# 请求头
headers = {
'cookie':'sensorsd%7D',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.39',
}
# 请求参数
data = {
'bizData[page_size]':str(page),
'bizData[isDesc]':'0',
'bizData[content_app_id]':'',
'bizData[channel_id]':'',
'bizData[product_id]':'p_5d3a92e84ff00_nwLrhOlP',
'bizData[qy_app_id]':''
}
# post 请求的参数,必须要编码
data = urllib.parse.urlencode(data).encode('utf-8')
# 请求对象的定制
request = urllib.request.Request(url=url,data=data,headers=headers)
return request
def get_content(request):
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
#获取响应的数据
content = response.read().decode('utf-8')
return content
def down_load(content):
# 字符串 -> json 对象
obj = json.loads(content)
# 在预览中可以看到是每页 8 条数据
for id in range(0,8):
# 获取整个对象
try:
audio_obj = obj.get('data').get('contentData').get('contentInfo')[id]
except IndexError:
print("最后一页数据未满 8 条")
return
# 因为下载路径在json对象中
# 获取下载路径
download_url = audio_obj.get('audio_compress_url')
download_name = audio_obj.get('resource_name')
urllib.request.urlretrieve(download_url,filename=('D:/BaiduNetdiskDownload/' + download_name + '.mp3'))
print(download_name + '--下载完成')
# 程序入口
if __name__ == '__main__':
start_page = int(input('输入起始页码:'))
end_page = int(input('输入结束页码:'))
for page in range(start_page,end_page):
# 每页都有自己的请求对象定制
request = create_request(page)
# 获取响应的数据
content = get_content(request)
# 下载文件
down_load(content)
print("全部下载完成!")
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
临川羡鱼!
喜欢就支持一下吧