前景介绍

最近小伙伴们听歌的兴趣大涨,网抑云综合症已经遍布各地。

咱们再来抬高一波QQ音乐的热度吧。

爬它!

目标:歌手列表

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤

任务:将A到Z的歌手以及全部页数的歌存到本地和数据库

观察网页url结构

当我们进入网页时发现此时是一个无参数的html网页加载。

寻找我们想要拿到的位置寻找变化,但我们点击A开头的网页跳转时,发现 url 改变了,index 参数应该是首字母,page 参数应该是页数变化。

这样的话就减少一个找参数的时间啦。

找到XML

还是习惯的点开检查按键,找到首字母的作者提供的XML都需要什么参数,随便点点A-Z发现 XML 有一个请求蹦出来,里面返回了是个 json 数据集,都点开看看发现找到了每个作者的参数了。成功了一小半!

既然拿到了XML的网站,POST请求是一定的啦,接下来就该分析分析网站所需要的参数都是什么了,大致猜测一下,这么多数据中sign和data参数有点诡异,不像是正常的参数,加密参数也找到了。

破解sign加密参数

search 找一下sign都在哪里。因为sign应该是个变量,所以说在他后面加个=会查找的更精确一些。找到一个sign参数的位置,这应该是个JavaScript代码,那就应该是这里面了。点进去!

在JavaScript中找到了 sign 的位置,找到了一个JavaScript调用的网站,我们进去看看是什么代码在里面。

当我们进入网站之后,代码有点乱我们在线格式化一下看看里面是什么。

格式化代码后发现这个里面含有sign参数。这个应该是sign的加密算法,但是其中传了一个参数进入,我们需要了解一下他传了什么参数,这样我们的sign就出来了。

回到我们调用JavaScript网站的文件中,继续往下看,我们发现 sign 传数值就在他的下部。我们看到了传了个data给这个sign加密函数,点断点看看data参数是什么。这data值看的好眼熟,这不是一开始很奇怪那个参数data么。原来data弄出来了sign就能给出来的。

我们继续找刚才的sign。点击下一次跳转我们发现我们找到另一个函数在里面,产生了一种疑惑,这个函数是做什么的,他为什么会跳向这里。

那我们先看看我们格式化出来的JavaScript到底能不能运行吧。说不定能运行呢。

哦吼,能运行,那就好办了,看看他返回的参数到底是啥,在开头定义一个sign=null,将t返回给sign,再把sign打印出来。这是刚才的那个跳转过去的方法。

原来如此,那我们将sign调用一下加个(),我们就能发现sign的值就出现了。但我们重复运行发现我们无法得到他的加密值,因为这些都是一样的。

回想我们刚才说的话,他需要加一个data参数才可以获得加密参数,那好再改一下。

首先我们先下载一个python调用JavaScript的库。pip install PyExecJS

开始写python代码

这是多次调用代码的结果,发现data传入成功了。

获取歌手个数以及页数

个数其实一开始我们已经拿到了,只不过那时候没介绍,仔细的童鞋们应该是看到了总数到底为多少个。我们点开刚才的返回json结果就能看到total已经给出来当前的个数了。

现在该分析一下data参数,盲猜一通估计page和index都在data里面,要不然这个参数传不上去呀。好的分析一下data到底有啥,咱拿过来看看。data里面看到了get_singer_list这个应该是主要的东西。

大致我们能分析出来。

字母的变化在 index 处,也就是A到Z以及后面的# 应该是一共27个在里面,也就是index从1到27我们需要传给他。

页数的变化在 sin 这里,第一页是0,第二页就是80,第三页是160,冷静分析一下应该是从0开始以80为公差的等差数列。这个八十应该是代表每一页都含有八十个歌手。

cur_page应该就是当前页数的意思。那咱们跟着sin一起改变。

那在这我们拿到了总数,加上每一页总共能展示多少,因为多出来的个数需要占一页才可以,我们使用向下取整。

获取作者名字以及id号

我们根据上述写出来爬虫代码后,就可以成功获取 json 的返回值了,在里面我们能看到一个歌手的参数一共有五个,其中 singer_mid 和 singer_name 是我们所需要的。拿到这两个值后可以进入网站下载当前歌手的歌曲。

寻找歌手的歌曲

我们随意点进去一个歌手,进去后寻找XML的网站,我在这里找好了是 getSingerSong 变量。

在这里能获取歌手的每首歌的所能拿到的结果。

我们看一下里面都需要什么参数,好像和上次的差不多哦。sign已经获取到了,data是给定的变量。单纯的data有点变化,但问题不大。那说明还是能正常访问这个XML的。

data中有点变化的位置就是 singerMid ,这个参数我们在刚才已经获取到了。直接在里面引用一下就好了。begin的参数是一个歌手歌的页数,num是一页中包括多少歌曲。其实我们传参数可以将这个参数改一下的。把num的值改到一个很大的值,我们就可以不需要改变begin的参数就能拿到所有的歌曲结果。

我们仔细找一下 json 里面的参数,点击音乐链接进入发现是https://y.qq.com/n/yqq/song/002MQlds19S8qy.html,我们能发现,在这个歌曲里面的 mid 参数就是每首歌的格式化位置。

寻找下载歌曲的m4a链接

我们点入播放中。寻找里面的m4a链接看看都包含什么参数,发现存在七个链接都是。但我们仔细一看歌曲的大小我们就会发现,前几个都是有问题的发包,一首歌怎么可能只有几kb呢。毫不犹豫点进去最后一个。

哦吼,这回参数不一样了哦。那我们在重新分析一下下吧别懒了。

我们先查找一下他给出来的一些包,看看能不能找到一个非加密参数出来。

果然,功夫不负有心人。vkey 就不是个加密参数!

破解参数前先学会"投机取巧"

我不知道刚才有没有仔细看这个位置,发现这个也是个很长的字符串,但是他很特殊,特殊到它和m4a的url是一样的。

为了让你们看到,我在这里把这俩写出来,发现到他们差了什么。不变的字符串前缀。。

4380&vkey=A6F8B706468C0ECFE0F8B6E5E8AAD783D5F852ED0CA66692EB1033B209080BE61208609BEBC2EAF66FA86AC887C8C9F03C02A152E2EF4E24&uin=0&fromtag=66

那我们先看看vkey到底需要什么参数给进去。其他参数还是都那些,还是差了一个data需要给进去的。咱们分析一下data都需要给啥吧。

vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"9232644380","songmid":["002MQlds19S8qy"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}

大致分析了一下

guid是个无用参数。

songmid 是歌曲的 mid,我们刚才已经获取了

uin 需要加入一个qq号才可以获取,如果未登陆默认为0

其他都是定死的参数

m4a文件是一个二进制文件。所以说我们写代码一定要写入二进制文件才可以。

代码优化

因为数据量过大,日常存入数据库

因为数据下载量大,使用多进程爬取。将A-Z及#各开一个进程

防止存入数据库在多线程阶段同时占用,上锁

全部代码

crawl.py

db.py

python爬虫qq音乐_Python爬虫实战:采集全部QQ音乐歌曲相关推荐

  1. python爬虫开发环境_python爬虫开发教程下载|Python爬虫开发与项目实战(范传辉 著)pdf 完整版_ - 极光下载站...

    Python爬虫开发与项目实战pdf扫描版下载.Python爬虫开发是一个Pthyon编程语言与HTML基础知识引领读者入门知识,重点讲述了云计算的相关内容及其在爬虫中的应用,进而介绍如何设计自己的爬 ...

  2. python爬虫酷狗_python爬虫教程:爬取酷狗音乐,零基础小白也能爬取哦

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Pyt ...

  3. python脚本自动qq签到_Python爬虫实现自动登录、签到功能 附代码

    这篇文章主要介绍了Python爬虫实现自动登录.签到功能的代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 前几天在一个素材网站上下载东 ...

  4. python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  5. python 正则表达式提取数据_Python爬虫教程-19-数据提取-正则表达式(re)

    本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式 Python爬虫教程-19-数据提取-正则表达式(re) 正则表达式 ...

  6. python爬虫的用途_python爬虫用途

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 专业点来说就是应用多台机器同时实现爬虫任务,这多台机器上的爬虫,就是称作分布式爬 ...

  7. python爬虫防屏蔽_python爬虫程序如何预防被限制

    有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份.此时,我们就可以通过设置Use ...

  8. python爬虫的用途_Python爬虫的作用与地位(附python3教程+爬虫技术路线图)

    小编说:网络爬虫是一种伴随着互联网诞生与演化的"古老"的网络技术,随着互联网进入大数据时代,爬虫技术迎来了一波新的振兴浪潮. 本文通过企业内部与互联网两个场景向大家讲书爬虫发挥了哪 ...

  9. python爬虫英文翻译_Python爬虫实现翻译功能

    前言 学了这么久的python理论知识,需要开始实战来练手巩固了. 准备 首先安装爬虫urllib库 pip install urllib 获取有道翻译的链接url 需要发送的参数在form data ...

  10. python爬虫自学路线_python 爬虫学习路线:从入门到进阶

    大家好,我是凉拌 今天给大家详解一下我的爬虫学习路线. 对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.比如有的人则认为先要掌握网页的知识,遂开始 HTML\CSS,结果入了前端的坑,浪费了 ...

最新文章

  1. ref和out 传递参数(C#)
  2. IT行业常见职位职业路线图
  3. 关于数据访问模式(三)—— Data Accessor模式
  4. 互联网1分钟 | 0321 小米上线“朕惊视频”;依图医疗与华为联合发布智能医疗云...
  5. base64编解码的类
  6. 自制“低奢内”CSS3注册表单,包含JS验证哦。请别嫌弃,好吗?。
  7. BZOJ 3224 普通平衡树 treap or vector
  8. python实现dns欺骗_DNS欺骗攻击
  9. Java基础学习总结(95)——Java反射主要用来干什么?
  10. SpringCloud面试题及答案(2021年SpringCloud面试题大全带答案)
  11. 全球创见者共话企业韧性 金蝶“数字员工”惊艳亮相
  12. 数据库系统原理与应用教程(042)—— MySQL 查询(四):使用通配符构造查询条件
  13. 清华大学计算机专业辅修课程,清华大学计算机应用专业-辅修专业
  14. ios 提交错误 ITMS-90096
  15. allegro如何快设置快捷键旋转器件
  16. 墙面有几种装修方法_墙面怎么装?四种装修方式总有一款适合你
  17. TensorFlow学习笔记1:graph、session和op
  18. 一、Excel简介、Excel的基本概念及操作、简单小工具
  19. 如何在Bios里禁用集成显卡
  20. Kaggle系列-IEEE-CIS Fraud Detection第一名复现

热门文章

  1. Windows游戏编程大师技巧第二版学习笔记之第一章
  2. shell脚本学习指南_Shell脚本初学者指南:基础知识
  3. Windows Kernel Programming Windows内核编程(一)
  4. 某中学校校园网络方案设计(课程设计)
  5. 苹果iPad在使用蓝牙键盘时,无法使用五笔输入法
  6. Linux 下载工具推荐: Motrix qbittorrent
  7. Switch / Xbox / PS / PSV / PSP 游戏指南
  8. 著名的软件项目开发和生命周期管理软件MKS.Code.Integrity.Enterprise.Edition.v12
  9. 2009国家公务员面试过关点点通
  10. Linux 系统批量安装字体的方法