吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2355|回复: 17
收起左侧

[Python 转载] 一次Python爬取听力mp3过程的简析

  [复制链接]
三滑稽甲苯 发表于 2021-8-1 17:37
本帖最后由 三滑稽甲苯 于 2021-8-1 17:43 编辑

起因

lz马上就要上大学了,老师建议我学点英语,争取在开学考取得好成绩,分到更好的班级进行教学。于是,买了本英语四级真题,准备练习听力。准备下载时,发现打包下载和单独下载音频都要登录或下载app...这怎么能忍?
app.png
登录.png

过程

目录页面的分析

法一

进入网址,老办法F12,发现没有链接,感觉有点棘手了
F12.png
但是,我怎么能放弃呢?仔细观察点开的播放音频的链接

/share/audio.htm?rid=29822410&sign=82e981&bid=124114&cid=22859080
/share/audio.htm?rid=29822413&sign=7ca709&bid=124114&cid=22859080
/share/audio.htm?rid=29822412&sign=bd5fe8&bid=124114&cid=22859080

不难发现,出了rid与sign外,其他的值是不变的
那么就在源码里搜索吧
cid.png
往下翻,马上找到了可疑部分
content1.png
content2.png
这里有所有书的播放网址,不难发现resId对应rid, resIdSign对应sign
把数据复制下来,true改为True以防报错,丢到代码里
正则匹配,问题解决~

match = search(r'resId=(\d+)&resIdSign=(.*)&mediaType=3', item['content'])

法二

在写这篇文章的时候,发现在各个div里就有信息
div.png
其中rs-id对应rid, sign就是sign
具体方法不展开,因为法一更简单

音频页面的分析

这个比较简单
随便打开一个播放页面,查看源代码,搜索.mp3
mp3.png
局势明朗啊~
直接用正则匹配即可

src = search(r'<audio id="audio_media" height="0" width="0" preload="auto" src="(https://ali-media\.xdfsjj\.com/.*\.mp3)"></audio>', html).groups()[0]

代码整合

from requests import Session # Session保持连接,加快下载速度
from re import search # 导入正则匹配函数

items = [ # 丢进来的数据,已格式化,为了控制篇幅仅列举一项
    {
        "bookId": 124114,
        "bookName": "(21下)大学英语四级考试超详解真题+模拟",
        "canDown": True,
        "canShare": True,
        "content": "/resourceservice/mediaplay.do?resId=29822410&resIdSign=82e981&mediaType=3",
        "createUser": 7345927,
        "dirId": 29822409,
        "downUrl": "/resourceservice/mediaplay.do?resId=29822410&resIdSign=82e981&mediaType=3", # resId: rid, resIdSign: sign
        "fkId": 3002989,
        "gmtCreate": 1625205456000,
        "gmtModified": 1625205542000,
        "id": 29822410,
        "idSign": "82e981",
        "isDelete": 0,
        "length": 18219091,
        "mediaType": 3,
        "pcrId": 22859080,
        "pcrName": "真题听力音频",
        "pv": 323,
        "status": 1,
        "thumbnails": "https://cdnqn-user.xdfsjj.com/7345927_352468E47886D235F25FD74A22E5B3FC.png?fix=no&imageView2/0/w/312/h/462",
        "times": 1518,
        "title": "2019年12月四级真题(第一套)",
        "type": 2,
        "viewCount": 323
    }
]
x = Session() # 实例化Session
for item in items: # 遍历items里的数据
    name = item['title'] # 标题
    match = search(r'resId=(\d+)&resIdSign=(.*)&mediaType=3', item['content']) # 正则匹配rid与sign
    rid, sign = match.groups() # 赋值rid与sign
    html = x.get(f'https://mp.xdfsjj.com/share/audio.htm?bid=124114&cid=22859080&rid={rid}&sign={sign}').text # 拼接并访问音频播放页网址
    src = search(r'<audio id="audio_media" height="0" width="0" preload="auto" src="(https://ali-media\.xdfsjj\.com/.*\.mp3)"></audio>', html).groups()[0] # 正则匹配mp3直链
    print(name, src) # 输出相关信息,提示下载进度
    with open(f'mp3/{name}.mp3', 'wb') as f: # 在`/mp3`目录下写入音频
        f.write(x.get(src).content)

效果

效果.png

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
QingYi. + 1 + 1 我很赞同!
佩格瓦拉 + 1 + 1 我很赞同!
去你的吧 + 2 + 1 我很赞同!
gaoruhu21 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 三滑稽甲苯 发表于 2021-8-2 06:58
人云亦云yi 发表于 2021-8-2 01:49
学习了
说了那么多,F12后,链接本来就有对吗

不是,索引页面上的链接与需要的链接不完全相同,但是其中的参数可以利用;mp3播放页面上确实有直链
Aven 发表于 2021-8-1 18:04
白衣国度 发表于 2021-8-1 18:11
18208900096 发表于 2021-8-1 18:30

值得借鉴的好思路
skywalk1979 发表于 2021-8-1 18:46
这个是有为青年啊!
studentguo 发表于 2021-8-1 19:07
学习。。。
neverrabbit 发表于 2021-8-1 19:55
学习一下
Milu79 发表于 2021-8-1 20:43
学习学习
yxn4065 发表于 2021-8-1 20:46
感谢楼主,对于准备四六级的我来说太有用l
头像被屏蔽
去你的吧 发表于 2021-8-1 21:23
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 13:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表