我最初学习Python的时候,听过余老师的课,学到了一些不错的技巧,也激发了我学习Python的兴趣,今天我再次拿到了以前的代码,经过修改后,变成了一个可以下载微信页面音频的小工具。这个小工具的主要功能是批量下载这个页面的mp3,下载音频mp3所在的页面在程序当中:
一、采用的Python包
我主要采用了requests, re和wget这三个包来实现。
1. requests获取网页源码
2. re是正则匹配我们要找的mediaid
3. wget是把找到的音频地址下载到本地。话不多说,开始上代码:
二、下载音频源码
import requests
import re,wget
def readurl(url):
"""
获取某个网页的内容,并筛选出3个mp3的ID
返回mp3的ID的列表
"""
text = requests.get(url).text
patt = r'voice_encode_fileid="(.*?)"'
filename= r'size="\d+\.\d+" name="(.*?)"'
ID_list = re.findall(patt,text)
file_list= re.findall(filename,text)
return ID_list,file_list
def downmp3(lst):
"""
获取给定的某个网页下的mp3
"""
for p in range(len(lst[0])):
path = 'https://res.wx.qq.com/voice/getvoice?mediaid='
name = path + lst[0][p]
wget.download(name,out=lst[1][p].replace(" ",""))
# mp3 = requests.get(name)
# #with open('hlmmp_%d.mp3'%p,'wb') as ff:
# with open(lst[1][p],replace(" ",""),'wb') as ff:
# ff.write(mp3.content)
print("已完成第%d个"%p)
if __name__ == '__main__':
#以下是微信网页的地址
url="https://mp.weixin.qq.com/s?__biz=MzAwNDU5MDE4MQ==&mid=2456894102&idx=8&sn=60e15868a78935291502bb17113242eb&chksm=8cac059cbbdb8c8a23c3ab6906832493cc2ac3fc813adb93f0ab53040e667bafb1f9425a7457&scene=178&cur_album_id=1948871998160355331#rd"
text = readurl(url)
print(text)
downmp3(text)
print("已全部完成。")
三、改进程序的方法
在第二个函数中,我注释到了原来采用with open的方法下来载音频,而是采用wget这个现成的包,实践证明这个包非常友好,而且不需要复杂的算法就能轻松实现我们想要的功能。
readurl这个函数是获取mediaid和文件名
downmp3这个函数是下载音频文件,同时以对应的文件名保存。
经过测试发现,下载速度还是不错的,而且保留了文件名,实现了一键下载,为我们节省了大量的时间。