首页 > 编程语言 >Python批量下载公众号话题下音频文件

Python批量下载公众号话题下音频文件

时间:2022-12-28 17:39:37浏览次数:36  
标签:批量 Python self list 音频文件 url api audio 音频

宝宝喜欢听父母讲故事,年轻人喜欢听文章,年纪大的人喜欢听评书,很多人喜欢听不一样的东西,文案能够从文字转化成为语言说出去,那么效果肯定是大有不同。


想必在日常生活中,大家都可能关注了一些微信公众号,上面有的博主会放上一些音频内容,这样的内容不仅从感官上与读者拉近了距离,更能够让大家利用碎片化的时间进行学习,微信公众号通过向用户呈现图片、文字、音频、视频和超链接,优化了用户的阅读习惯。我们可以根据自己的喜好有选择地阅读。同时,信息获取方便,成本低,体验更好。


但是有的时候,我们刚接触了一个新的公众号,看着里面发布的几百条甚至几千条的音频,想逐个听取,但是来回翻动很是麻烦,于是就

首先我们找到该公众号所属的话题,如下:

https://mp.weixin.qq.com/mp/appmsgalbum?search_click_id=9603052495515652739-1665993957662-3161382796&__biz=MjM5NjAxOTU4MA==&action=getalbum&album_id=1681628721901830149#wechat_redirect


该链接包含了公众号下面前十个音频文章,在该界面我们获取到音频所属的文章链接,那么我们爬取的思路也很简单。

  • 获取该话题下的所有音频链接
  • 循环遍历所有音频链接
  • 获取audio_id,请求对应文件接口

因每次打开只显示话题下的前十个音频文章,所以我们向下滑动,发现发送了ajax请求,这样我们模拟发送请求即可获取所有的音频链接,拿到所有的音频链接后,我们请求所有的url,获取音频文章详情中的voice_encode_fileid(audio文件ID),然后请求如下接口链接即可,如下:

https://res.wx.qq.com/voice/getvoice?mediaid=audio_id


以上就是批量爬取公众号音频的思路,具体代码如下:

import requests
import re
import json
import time
import os




class WechatAudio(object):
audio_list_url_api = "https://mp.weixin.qq.com/mp/appmsgalbum?"
audio_item_url = ""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
}
audio_voice_url = "https://res.wx.qq.com/voice/getvoice?mediaid="
all_audio_url = []
audio_list_url_api_param = {
"count": 10,
"begin_itemidx": 1,
"action": "getalbum",
"uin": "",
"key": "",
"pass_ticket": "",
"wxtoken": "",
"devicetype": "",
"clientversion": "",
"appmsg_token": "",
"x5": 0,
"f": "json",
}


def __init__(self, list_url):
# pass
self.first_req(list_url)


def send_request(self, url, params={}):
response = requests.get(url, params=params, headers=self.headers)
# print(response.url)
return response.content.decode("utf-8")


def first_req(self, list_url):
start_page = self.send_request(list_url)
self.audio_list_url_api_param['__biz'] = re.search(r'__biz=(.*?)&', list_url).group(1)
self.audio_list_url_api_param['album_id'] = re.search(r'album_id=(.*?)&', list_url).group(1)
self.audio_list_url_api_param['begin_msgid'] = re.findall('data-msgid="(.*)"', start_page)[-1]
links = re.findall('data-link="(.*)"', start_page)
self.all_audio_url = [link for link in links]
self.more_url_list(self.audio_list_url_api_param)


def more_url_list(self, params):
api_res = json.loads(self.send_request(self.audio_list_url_api, params))['getalbum_resp']['article_list']
for res_item in api_res:
self.all_audio_url.append(res_item['url'])
if int(api_res[-1]['pos_num']) >= 10:
self.audio_list_url_api_param['begin_msgid'] = api_res[-1]['msgid']
self.audio_list_url_api_param['begin_itemidx'] = api_res[-1]['itemidx']
time.sleep(10)
print(len(self.all_audio_url))
self.more_url_list(self.audio_list_url_api_param)


for audio_url in self.all_audio_url:
self.down_audio_file(audio_url)
time.sleep(5)


def down_audio_file(self, link_url):
dt_res = self.send_request(link_url)
voice_id = re.findall(r'voice_encode_fileid=\"(.*?)\"', dt_res)[0]
title = re.search(r"property=\"og:title\" content=\"(.*?)\"", dt_res).group(1)
audio_data = requests.get(self.audio_voice_url + voice_id)
aduio_path = "./weMp3/"
isExists = os.path.exists(aduio_path)
if not isExists:
os.makedirs(aduio_path)
print('正在下载音频:' + title + '.mp3')
with open(aduio_path+title + '.mp3', 'wb') as f:
f.write(audio_data.content)




if __name__ == "__main__":
# topic_url = input('请输入音频话题地址:')
topic_url = "https://mp.weixin.qq.com/mp/appmsgalbum" \
"?__biz=MjM5NjAxOTU4MA==&action=getalbum&album_id=1681628721901830149&scene=173"
wechatAudio = WechatAudio(topic_url)




标签:批量,Python,self,list,音频文件,url,api,audio,音频
From: https://blog.51cto.com/u_15924937/5975818

相关文章

  • Python 多进程下载站点所有小说
    小说,宅男必备,也是当今社会人们打发时间的一种方式。今天给大家分享的,喜欢看小说的同学可以收藏起来了!!目标站点:https://www.zhenhunxiaoshuo.com爬取思路:获取站点分类下的书......
  • python版抖音短视频无水印下载
    如今,各类短视频应用已融入不少人的日常生活。短短几个镜头,可仰望浩瀚星空,也可俯瞰市井烟火;能近距离观察社会肌理,也能深度透视时代景深。点开视频,领略城乡风貌,了解风土人情,足......
  • 利用python爬取百思不得姐demo实例
    作为一个刚接触爬虫的小白,在学习了一定的语法后,第一个目标就是找一个适合初学者的网站来小试牛刀。一般来讲都会选择一个难度系数比较低的网站来进行爬取,这样不仅有助于我们......
  • 【Python 库】bs4的使用
    和lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据。BeautifulSoup,是一个第三方的库,所以使用之前需要安装,安装方法,输入cmd,调出......
  • python运行环境以及编辑器介绍
    Hello呀,EveryOne,在上次更新了第一篇的公众号推文后,小编也如约的和大家玩起了消失,但是工作还是要进行的,这不又乖乖的回来码字了,废话不再多说,今个带大家来敲下python编写的第......
  • Python爬取意林杂志所有期刊文章
    可能很多人对这个意林杂志比较陌生,但是对于小编来说,那可是满满的回忆。记得我们上中学那时候读过的意林,那可是一本接着一本,其中有很多令人感动的故事,一直被温暖,被治愈。接下......
  • python爬取公众号链接里面的图片
    话不多说,步入今天文章的分享内容,今天给大家带来的是~~爬取微信公众号文章里面的图片。爬虫代码:#coding:utf-8#__auth__="maiz"#__date__="2021/3/27"importosimport......
  • Python中使用xpath一键获取各国国旗
    国旗是一个国家的主权意识不断增强后必然的产物,国旗是国家的一种标志性旗帜,是国家的象征。代表着一个国家的主权和民族的尊严。每个国家的国旗都由特有的颜色和图案构成,这些......
  • Python一键查询 ICP 备案详情
    做搜索引擎优化的都时长面临一个问题,就是网站备案到底对seo是否有影响呢,今天将为大家仔细分析网站备案,到底对SEO有没有影响?首先说下网站备案的目的、是为了防止在网上从事......
  • 使用Python的asyncio模块异步下载整站壁纸
    这篇文章主要给大家介绍关于Python中asyncio模块的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Python具有一定的参考学习价值,需要的朋友们下面来一起学习学......