使用splinter+requests批量下载微信公众号中的音频文件 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 公众号相关 >

使用splinter+requests批量下载微信公众号中的音频文件

发表时间:2020-10-19

发布人:葵宇科技

浏览次数:36

需求分析

晚上老妈微信上给发了个豫剧公众号的链接,要我帮她下载到U盘上

打开看了下,页面还比较规矩,可以直接用CSS选择器晒出来列表链接地址,再进行遍历获取.

这里遇到一个小坑:公众号中内嵌音频文件不会直接在页面中加载<audio>标签,只有在点击播放按钮后才会出来,所以就不能直接解析HTML页面了,用splinter来操作Chrome模拟鼠标点击后再解析页面就可以咯。代码没几行,直接看注释就可以了。

环境依赖

  • Python 3.6+
  • requests
  • splinter
  • chromedriver(需要与安装的Chrome大版本一致)

运行效果

在这里插入图片描述

在这里插入图片描述

完整代码

import os
import requests as rq
from splinter import Browser

BASE_URL = 'https://mp.weixin.qq.com/s?__biz=MzU2OTI3NjQ4OA==&mid=100000538&idx=1&sn=419a647c0372d7630a197db9454bddc6&chksm=7c80623d4bf7eb2bca0756d63ee7250807d225a1fffe475db317d7c745b51074e5cc58b3e607&mpshare=1&scene=2&srcid=11076nyob9dLyKeQrFDgcnwY&sharer_sharetime=1565615878241&sharer_shareid=80ca6d7f86bae39e4b8264e1365d4b6a&from=timeline&clicktime=1565621528&key=0053416997e154650cb74184219ffa63550a1b3adf6c5c6bc705442434f0b0d05fbbe8217ed41a8f0f9165a2008bacbba44b624f535047b02cff8b47d698619ce97e48cf5663091b25deb3276764083a3719066790537f1813f0d7e3d5b6ae32fcc8cc3e49633034326feda342a8772d88981eedb113ea9a491c345c07ab271e&ascene=1&uin=MTY3NjYy&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=AaZhp%2BDCkmag01n7EMTREmg%3D&pass_ticket=hbFyRKZiXYK0ETPppZH0Xbwm2Tnpv7pFXeyOGE846fyLoLRcyDdPwaWI4mjwJzSu&wx_header=0'
bro = Browser('chrome')

if __name__ == '__main__':
    # 访问目标页面
    bro.visit(BASE_URL)
    # 获取所有列表DOM
    links = bro.find_by_css('a[data-linktype="2"]')
    # 由于后面需要进行页面跳转,所以先将列表信息解析后存到数组变量中
    tasks = []
    for link in links:
        if link.text:
            tasks.append({
                'title': link.text,
                'url': link['href']
            })
    # 开始遍历任务
    for i, t in enumerate(tasks):
        filename = t['title']
        filepath = os.path.join(os.getcwd(), 'mp3', f'{filename}.mp3')

        print(f'正在下载\t{i}/{len(tasks)}\t{filename}')

        bro.visit(t['url'])
        # 微信公众号页面中的音频文件只有在点击了开始播放后才会在HTML中加载出来<audio>标签
        bro.find_by_css('.audio_card_switch').click()
        audio_src = bro.find_by_tag('audio')['src']
        # 用requests直接下载到文件
        open(filepath, 'wb').write(rq.get(audio_src).content)
        
    bro.quit()
    print('任务完成')

相关案例查看更多