python开发公众号源代码_利用Python编写脚本批量下载公众号中的音频

18beaa1c5a066962e3821d669312474e.png

欢迎大家光临我的博客,大家一起交流学习哦

陈京九的博客​www.chenjingjiu.cn

首先声明我只是一个小菜鸡,把自己琢磨一些功能的过程发到了这里当做记录,希望大神们轻喷,能给我一些指导就更好啦~

上一篇博客教大家下载了公众号中的音频文件,这次利用python脚本进行批量下载。

首先还是跟上一次操作差不多,先把微信设置好,然后点击链接,进入浏览器中

683753b67ad0921918ea8834164d43ce.png

这次我们要爬取的就是这些文章中的音频。

首先我们要知道如何下载当前页面的音频,还是F12,然后点击network,Media,点击播放按钮,弹出下面的文件

987ae846624e3da94a0c17ae63ac4ac3.png

双击文件,弹出新的页面,此时的页面链接就是该音频的真实地址,可以通过访问该网址得到音频文件。

为了了解该文件是如何传输的,我们用burpsuite抓包看看

087c63db0731b16aa6a710d053df0fc8.png

这个就是请求报文的头部,Go

ead7a67caeaead4c1b2cf8ecd7c76ba2.png

返回的响应包体中包含大量的乱码,其实这个就是音频文件本身。我们的音频文件传输都是以这种方式传输的,看看Hex形式的样子

455a25c71ebf514310163fb6f3930e3c.png

我们把这些字符保存下来会怎么样呢?

点击Headers,在下方点击右键,选择copy to file

6ae5969cf26422a9032a93792e7d5c94.png

保存为1.mp3,这时保存的路径就出现一个名为1.mp3的文件,点击运行,果然可以播放。

其实说了这么多就是为了告诉大家,音乐文件的存储不外乎这些字符,我们只需要把得到的报文中的字符保存成文件,就相当于保存了音乐本身。

知道了这个知识,我们就可以进行下一步操作,就是利用python模拟访问网页。

1.获取歌曲的真实下载地址

3c57803889ac81214896a8d972ac8f51.png

这个是获得音乐真实下载地址的代码,headers中的User-Agent和Cookie是必不可少的。因为微信中的网页对用户浏览器做了严格的限制,打开微信公众号的文章时,都会首先校验是否是微信浏览器打开,如果不是,会弹出请用微信浏览器打开的网页。而为什么我们现在能通过电脑浏览器访问微信公众号的页面呢?就是因为我们从微信中点开该链接时,系统自动帮我们加上了微信浏览器的UA。

利用requests库访问目标url,从返回的内容中找到'voice_encode_fileid="(.*?)"'字符串,然后返回给url。

上面这个操作有两个需要注意的:

1.前面的url和后面返回的url不是一个url,前面的url是我们最开始点击的链接,也就是公众号文章的链接。而后一个链接是从公众号文章中获取到的歌曲真实下载地址链接。

2.为什么找'voice_encode_fileid="(.*?)"'这个字符串呢?

因为我们要获取到歌曲真实的下载地址,如何在页面中找到这个地址呢?

首先检查元素,找到歌曲的编号

bbfe1a7d05357a9922a97c5255427247.png

我们检查网页源代码,搜索歌曲的编号

0f819671743421e4b84ada56d91a7b87.png

看到该歌曲的编号前面字符串就是'voice_encode_fileid=',然后中间的(.*?)这个是python的re模块贪婪匹配的符号,我们需要将这个代替我们想要获取的字符串。最后我返回了一个url和一个名字,主要是为了下载歌曲时命名所用。

通过上面的操作我们获得了歌曲的真实下载地址,接下来就是下载歌曲

2.下载歌曲

1d1b44379882c11916deebed567276b2.png

下载歌曲的代码其实就相当简单明了,通过字符串拼接出真实下载地址,然后get,将获得的响应报文中的包体写入到文件中,文件的名字就是上一步获取到的名字。

这里主要涉及到的就是歌曲的保存问题,有了前面的知识,相信理解起来也就不是太难了。

3.获取其他歌曲的链接

02805eb866916f89efccf2f20d23920d.png

上面的代码就是获取其他歌曲的链接,也是通过检查页面源代码,然后找到网页中其他歌曲的链接并保存下来。

这个函数中有一个url_queue,这个是python中的队列,主要是避免多线程操作时出现未知的内存错误。

获得了链接后,该函数会将url放入到url_queue队列中,等待get_url函数读取到其真实的歌曲下载地址。

4.主函数,模块的组合

2c0f13fa95391dff4d6467a2fd8ad2ac.png

程序首先定义一个队列,用来存放歌曲链接,然后定义了一个url_list,存放初始的公众号文章链接,通过这些链接获取到更多的链接。然后定义一个循环,对url_list中的url进行爬取,获得更多的歌曲链接。最后定义了一个循环,获取到歌曲的真实下载链接和名字,然后通过get_music()函数将歌曲保存到本地。

5ad0ebeee89e1d30614d0bd0aaa5f99b.png

点击运行

2efc49b1e2ff5a8920b8a9e6259aa167.png

可以看到程序先读取了url_list

然后保存相关的歌曲,并将歌曲命名为该编号的最后3个字符

7a27375b2f9c61a69287a766c4179615.png

最后获取到了39个歌曲,这个爬虫只是一个粗略的版本,并没有对很多情况进行处理,这个只能算一个爬取一轮的爬虫,并没写递归或循环进行更加深度或广度的爬取。需要爬取别的页面可以将页面的url放入到main函数的url_list中,未来有机会再研究更加深度的爬虫。

这个爬虫的代码放到了我的个人博客中,需要的朋友可以访问下载

green 说明 本仓库是微信公众号 Ms_haoqi 的源代码,基于wechat-python-sdk和Tornado,使用图灵机器人API回复用户的消息,可以与用户进行文对话。 扫码查看公众号: 二维码 更多介绍可以参考博客 Python快速搭建自动回复微信公众号。 依赖 pip install -r requirements.txt 使用配置 需要在根目录下添加conf.json文件,内容为: { "token": "your_weixin_token", "appid": "your_weixin_appid", "secret": "your_weixin_appsecret", "mode": "normal", "mongo_db": "green", "max_host_count": 5, "auto_reply": "yes", "tuling_key": "1d2679920f734bc0a23734ace8aec5b1", "tuling_url": "http://www.tuling123.com/openapi/api", "type": "subscribe" } 其需要修改的参数有: token : 修改为微信公众号的Token(令牌) appid : 修改为微信公众号的AppID(应用ID) secret : 修改为微信公众号的AppSecret(应用密钥) tuling_key : 修改为申请的图灵API KEY 另外需要本地安装有MongoDB 注意事项 端口 微信公众号只能设置在80端口,因此 green 默认运行在80端口,如果自己配置端口转发,希望 green 运行在其他端口,可以修改 config.py 文件 settings 的 port 字段。 服务器url green 的默认配置会将所有请求路由到 http://ip:port/wx ,如果希望修改此路由,可以在 config.py 文件 修改路由表 web_handlers 。 图灵key 默认的图灵key不能使用,需要自己去 图灵机器人官网 申请自己的图灵key, 再填到 conf.json 对应字段下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值