通过爬虫初步实现qqMusic的搜索下载
- 1.起点
- 2.破局
- 3.借鉴博客
- 4.几个过程记录
- 5.这一部分有待完善的功能 (还要先完成主线)
- 6.贴下工作时补的知识
- 7.小结
前两天因事缓了下进度,今天继续任务。
1.起点
由于之前看的网课讲得都是很基础的知识,离实际任务所需有一定差距,我个人选择借鉴他人实例,再主要融入自己的思想。也希望经过一次次的试炼,自己能有一天写出90%以上原创的代码。
通过群里简单的讨论,我了解到vkey,songmid等与qq music有关的名词,这也是我的搜索起点吧,我以他们为关键词开始思考借鉴。QQ音乐API寻找开始。。
2.破局
充分利用浏览器的开发者工具,细致检索列表内。其中有许多中间URL,最终URL也在其中。通过preview可以清楚找到许多信息参数,再从中找到歌曲所有的独特信息
3.借鉴博客
4.几个过程记录
中间url有借鉴博客。(应该是通过不同对比,发现变化的参数来确定)
在播放页面这是一首歌曲最终的stream流地址,可以以此为检验,因为后面发现不止一个mid,vkey。
可以通过对几首歌曲信息观察,发现vkey,songmid随歌曲变化而变。而guid,uin等推测是周期改变,短时间一致。
所以,要从搜索页面和播放页面再获取信息。
付费歌曲的信息,注意浏览器页面preview的参数和代码里loads之后的json对象形式不一定相同,如pay_down对应代码中的paydownloaded。
搜索页面,有中间URL,preview——data里面也能拿到诸如songmid的信息,vkey还没看到,可能就要去播放页面再找着了。
果然,下一个URL又出现了,还有想要的信息,像sip有最终头部等。
当大致信息知道如何拥有后,就可以开始通过爬虫实现基本功能。
通过借鉴实例的帮忙,我写出了初版代码。(将于近期贴上,还在完善中)
-guid,uin应该要定期更新,现在自己还是手输。
5.这一部分有待完善的功能 (还要先完成主线)
1.用户交互输入错误的情况如何处理得更好 (健壮性)
2.程序运行效率的提升
3.列表全是VIP怎么办(我太穷了吧),不过可以获得VIP的songmid,还需解决URL2
4.多线程异步下载,不知能不能爬取更高音质资源
5.爬取歌曲评论,专辑图片,MV
6.GUI,现在就一原始人版音乐下载器
7.其他人性化的功能
8.代码在视觉上更整洁简洁点吧
6.贴下工作时补的知识
- self的用处:
1)self只有在类的方法中才会有,独立的函数或方法是不必带有self的。
2)self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
3)self名称不是必须的,在python中self不是关键词,定义成a或b或其他名字都可以,只是约定俗成我们定义成了self。
4)self指的是类实例对象本身,不是类本身。 - json文件储存:
JSON ,全称为 JavaScript ect Notation ,也就是 JavaScript 对象标记 。它通过对象和数组的组合来表示数据,构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。
1.对象和数组
JavaScript 语言中,一切都是对象。 因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、 对象、数组等,但是对象和数组是比较特殊且常用的两种类型。
对象:它在 JavaScript 中是使用花括号{ }包裹起来的内容,数据结构为{ key1 value1, key2: value2 }的键值对结构。在面向对象的语言中, key 为对象的属性, value 为对应的值。键名可以使用整数和字符串来表示,值的类型可以是任意类型。
数组:它也可以像对象那样使用键值对,但还是索引用得多。同样,值的类型可以是任意类型。 - 2.读取 JSON
Python 为我们提供了简单易用的 JSON 库来实现 JSON 文件的读写操作,我们可以调用 json.loads ()方法将 JSON 文本字符串转为 JSON 象,可以通过 dumps ()方法将 JSON 对象转为文本字符串。
例如,如果有一个 JSON 形式的字符串,它是 str 类型,使用 loads ()方法将字符串转为 JSON 对象,就可以用索引来获取对应的内容了。
获得json数据中元素: - 有关json字符串的表示使用双引号包围:
- 如果从 JSON 文本中读取内容,例如有一个 data.json 文本文件,其内容是刚才定义的 JSON符串,可以先将文本文件内容读出( r ),然后再利用 loads ()方法转化。(这里我还没研究)
3.输出json - 如果想保存 JSON 的格式(整齐换行有缩进),可以再在上面dumps后加一个参数 indent ,代表缩进字符个数,如indent=2。
如何将中文内容写入json文本:
7.小结
从无到有,对于我这样的小白的确挺难。之前的10天我接触的基本是理论,但纸上得来终觉浅,今天通过实操,更能激发我的兴趣与动力。当底层知识有些许积累后,边做边学真的让人受益匪浅,有效进步。不要只满足于理论,这是我对自己的真心话。