url分析,拿到初始url(start_url)

要爬取的内容为qq音乐的排行榜中的歌曲,首先我们要分析url:

1.打开qq音乐的首页,点击排行榜,右键,检查(谷歌浏览器,其他浏览器各有不同,360浏览器为:审查元素)。 

2.右键,检查: 

3. 
我们要分析所有向后台发出的请求,找出有用的url。点击Network,然后刷新页面。我们会看到有很多请求。 
我们对所有的请求进行过滤和筛选,此时选用最笨的方法,手动查找,点击Response,只查看返回的信息。然后依次点击,左侧请求,查找有用的请求数据 
 
4.我们看到,当点击fcg_v8_toplist_opt.fcg?……….时,右边的response中出来一串数据,当然,出来类似数据的有那么几条请求,此时就需要一个个的点开查看了。看看有没有我们想要的或者相关的数据。这时,我们可以点击Preview更方便的进行查看 
 
这里的我们可以获取到每个榜单的topid,这就是我们需要的数据。为什么topid是有用的,别的没用么?其实我们可以从一首歌曲歌曲逆向推理,歌曲的url是什么,怎么得到的,需要哪些必要的参数。逆向的话更容易些。这篇博客我们正着写。(当然,我也是逆向分析的-_-) 
知道这个请求有用后,我们需要获取它完整的请求的url。我们可以通过分析headers中的request请求,拼接出完整的url

https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_opt.fcg?page=index&format=html&tpl=macv4&v8debug=1&jsonCallback=jsonCallback
  • 1
  • 2

 
空白的蓝色框就是完整的url,这就是我们的初始url了。 
我们把这个url复制,粘贴到浏览器的地址栏,就能返回一堆数据,这里面就隐藏了我们需要的数据,后面我们还得想办法(正则、xpath、python字典。。。。等方法)把我们需要的数据提取出来。 
 
通过浏览器返回的数据,我们发现,去除【jsonCallback( 】 和最后的【)】后,剩下的就是json格式的字符串,这样最好了,给了我们处理数据的多种方法。

url分析,拿到表单详情页的url(start_url)

除了上面的请求有我们需要的数据外,我们查找的过程中,还发现一个请求返回的数据有歌曲的信息。

https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?tpl=3&page=detail&date=2017_33&topid=3&type=top&song_begin=0&song_num=30&g_tk=5381&jsonpCallback=MusicJsonCallbacktoplist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0
  • 1
  • 2

我们使用之前的方法拿到完整的url还记得Headers中的request请求头么,对,就是在那。或者我们右键图中蓝色部分,拷贝完整linkurl就行。哇咔咔,这个url怎么这么长,太难看了。通过我们手动测试后,得到精简版的url:

    https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?topid=4
  • 1
  • 2

这个不错吧,吧它复制到浏览器地址栏,回车一下,嗯,嗯?这是神马东东,这么多字?没错,我们又偷偷的笑了,这就是一个完整的json字符串。哈哈哈。找到宝藏了,里面就是歌曲信息哦。不用再分析网页的源码了有木有。 
看到url中的topid没,我们已经从上一个的url拿到很多的topid啦。这样,每个榜单的歌曲列表我们就已经拿到了。

如果只需要拿到歌曲信息,而不是歌曲的小伙伴到这可以停下了。不满足的可以接着往下面看。

听一首还不错的歌曲

1.有点累?那么好,来歇息一下,听一首歌。 

突然看到tf男孩的歌曲,你说啥?e_e,这个不要紧,来,点进去听一下,(事实是我听了一下下就换了首自己喜欢的歌)。就是这么任性。 
 
点击,播放。就这么神奇,你一点击,它就播放了,熟悉js的知道,这应该是触发了一个事件,然后向后台发送请求,在反回来歌曲的数据,我们要是知道它向后台发出的什么请求就好了。如果知道的话, 我们就能拿到数据了啊。 
休息之余,忍不住又看了下请求数据的情况: 

先点击图中标记的图标,清除已有的信息。然后刷新页面,此时,出现了一堆请求。但要知道的是,刷新后,页面中的歌曲还没有播放。也就是此时,这首歌曲的文件还没有缓存过来。一旦我们点击播放,才会从后台的数据库中加载音乐。 
2.此刻我们点击图标,清除请求信息,如果页面加载慢,一直不断请求,就多清除几次,一定要保证没有播放音乐的情况下去清除。然后播放音乐,就会看到有几个新的请求。 

3.我们看到此时的请求也就十多个,这么少最好不过了。突然发现时间线部分,有一条长,长,长———的线,这莫不是传说中的飞机线,不,不对,这应该是这首歌的的请求信息了,线这么长,持续时间这么久,这是多大的文件才加载这么长时间啊,整个页面上的大文件也就是歌曲文件了。就是它了,别跑。 
我们点击绿色选中部分,筛选出这条请求。 
 
点击这个请求,发现它并没有response,怎么回事,推断错了?我们看看它的请求是什么,从headers中或者从右键拷贝,拿到完整的请求的url。复制到浏览器地址栏。回车。 

功夫不负有心人。完成。

歌曲url是怎么来的

1.等等,,好像忘记了什么事情。说好了爬取歌曲呢,这一首歌怎么够。得想办法拿到每首歌曲的url才行。然后我们分析获取这首歌的url:

http://dl.stream.qqmusic.qq.com/C400001CkBs10UxKxc.m4a?vkey=91CD0C315ADBA8F418E6969A1E6829BED8C8116697
&guid=6394043400&uin=0&fromtag=66
  • 1
  • 2
  • 3

C400001CkBs10UxKxc.m4a这是什么鬼? 
vkey=91CD0C315ADBA8F418E6969A1E6829BED8C8116697毛线? 
guid=6394043400?二毛线?&uin=0&fromtag=66 ?三毛?四毛?

2. 
001CkBs10UxKxc话说这个东东好像在哪里看到过。。忘记了。偷偷告诉你,就在上一篇博客的歌曲列表的json数据中,每首歌曲的信息中有一个songmid,就是它了。藏的够深的,要不是我狠狠的笨笨的怼了它许久,,,, 
vkey?guid?uin?fromtag?试了一下url,删除任意一个参数,想把它变短的想法是废弃了。在找一首歌曲,比较一下咯。 
3.返回歌曲列表页面,点击一首别的歌曲,进入播放页面。清除请求信息,刷新页面,在不播放的情况下再清除。直到没有再发生请求,干干净净的时候。点击播放。 

同样的方法,拿到新的歌曲的请求url。

http://dl.stream.qqmusic.qq.com/C400003OUlho2HcRHC.m4a?vkey=767447752F9A65AA78CCCE707CB7A7E0BC77CF143B421478E9E99EB313D0D629BAC55C9DA819BB9976891BD690201F11DBAAFCB3E29B9F42
&guid=6394043400&uin=0&fromtag=66
---------fen--------ge-------xian-------------------------
http://dl.stream.qqmusic.qq.com/C400001CkBs10UxKxc.m4a?vkey=802B51BF242EAE216EC0F2CF101324015B9E02F537FE517AD2241ECE2938A049942868FE6F5E1247D21A7760138B93875234F2BB9472BB3D
&guid=6394043400&uin=0&fromtag=66
  • 1
  • 2
  • 3
  • 4
  • 5

可以看出guid,uin,fromtag都一样,除此,我比较了好几个,也都一样。songid我们已经知道从哪里获取了,就剩下vkey了。

4.除了这个midia类型的请求外,我们分析其他的请求信息。 
我们选择时间线的开始部分,单击不松手拖拽。 

我们发现fcg_music_express_mobile3.fcg?。。。的请求中含有vkey信息。完美。 
怎么发现的?点击response,一个一个点击,有信息的话按住ctrl+f 进行搜索,我们可以收缩一下这首歌vkey的部分字段。比如:0cDovL2Jsb2cu。或者点击preview,查看返回的信息内容。于是就发现这个fcg_music_express……了。 
我们从这个请求拿到了key,那么这个请求的完整的请求url是什么呢。从headers中得到:

https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback22122012253690038&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747&callback=MusicJsonCallback22122012253690038&uin=0&songmid=001Nl0W80sBSwJ&filename=C400001CkBs10UxKxc.m4a&guid=6394043400
  • 1

把这个url输入到浏览器地址栏,回车。发现自动下载一个文件,文件里面写有一些数据,数据和我们看到的response一样,其中就有vkey,也有songmid。 

我们尝试拿到其他歌曲的fcg_music_express_mobile3.fcg?请求,做对比。可以得出精简版: 
 
其中,songmid最为关键。也就是这个常常的url中,只有songmid是变化的。filename也就比songmid多了个c400。

5.至此,大致的思绪有了。

1). 得到starturl 
-https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_opt.fcg?page=index&format=html&tpl=macv4&v8debug=1&jsonCallback=jsonCallback(由此得到topid,榜单id) 
2). 由topid得到榜单内部的歌曲列表信息 
-https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?topid=4 (遍历topid,可以得到若干榜单的url,此url可以返回一个近似json格式的数据,得到榜单内部歌曲列表) 
3). 获取每首歌曲的信息,正则,xpaph,python字典,提取数据都可以。歌曲的信息包括:榜单名,songname,songmid,singer, 
4). 由songmid拼接url 
-https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=205361747 
&songmid=004eePuq3pHTsg&filename=C400004eePuq3pHTsg.m4a&guid=1364347280 
(返回的数据中可以拿到该歌曲vkey,此时可以拼接出歌曲郑震的url)

5). 拼接歌曲的真正url 
-http://dl.stream.qqmusic.qq.com/C40000103MSe3mEOCX.m4a?vkey=E38CABD480B73256204A2BD82FAD9D169B2B72B98551BE77BCC8F4FD772AE2382ECB7C21DB5835640E49C4AAB2E8CA8E8CCC50DE755C6116&guid=1364347280&uin=0&fromtag=66 
6). 这个时候我们得到了歌曲的完整的信息:topid,songmid,songname,singer,song_url 
7). 通过这个song_url我们就可以拿到歌曲了。

url分析结束

url的分析到这就结束了,有基础的小伙伴看到这应该能写出爬音乐的爬虫了。当然是用神马工具这都是小意思啦。都可以写出来,只不过性能上有些差别。

scrapy爬取qq音乐相关推荐

  1. scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息。

    系列文章目录 第一章 scrapy爬取起点中文网24小时热销榜单. 第二章 scrapy爬取苏州二手房交易信息. 第三章 scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息. 目录 系列文章目录 前言 一 ...

  2. 使用scrapy爬取qq音乐

    记录一下爬取qq音乐的过程 首先我们搜索一个歌手 如:周杰伦 就会得到周杰伦的歌曲列表 我们点击播放,在所有的请求中找到这个: 这个请求就是真正播放歌曲的请求,那我们看一下他的url http://1 ...

  3. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  4. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB

    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本涵盖了爬虫 ...

  5. python爬虫爬取音乐单曲_Python爬取qq音乐的过程实例

    一.前言 qq music上的音乐还是不少的,有些时候想要下载好听的音乐,但有每次在网页下载都是烦人的登录什么的.于是,来了个qqmusic的爬虫.至少我觉得for循环爬虫,最核心的应该就是找到待爬元 ...

  6. python爬取qq音乐周杰伦首页歌词

    #爬取qq音乐周杰伦首页歌词 #未名编程 import requests from bs4 import BeautifulSoup import json import reURL = 'https ...

  7. python爬取qq音乐周杰伦_Python爬取QQ音乐url及批量下载

    QQ音乐还是有不少的好音乐,有些时候想要下载好听的音乐,如果在网页下载都是还需要登录什么的.于是,来了个QQmusic的爬虫.至少我觉得for循环爬虫,最核心的应该就是找到待爬元素所在url吧. 参考 ...

  8. 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息

    本文对使用到的技术仅做简单的介绍,若想了解更多,请前往相应的官网网站进行学习. 本文适合对爬虫相关知识接触不多的新手,主要是普及Selenium如何做爬虫,大佬请跳过. 1.Selenium简单介绍 ...

  9. 爬取qq音乐的评论并生成词云——以《听妈妈的话》为例

    爬取qq音乐的评论并生成词云 我们选取的是歌曲的周杰伦的 听妈妈的话 先看效果图 首先,我们进去qq音乐找到这首歌 网易云出来挨打 https://y.qq.com/n/yqq/song/002hXD ...

最新文章

  1. java基础知识1---面向对象及final,finally,finalize区别
  2. javaweb jsp
  3. java第二阶段_Java第二阶段总结
  4. 设计一个可以变换的c语言图案,关于图形和变换专题的数学试题
  5. 五子棋python设计心得_python五子棋游戏的设计与实现
  6. php5.4之分布式缓存memcache(windows7下安装配置)
  7. 任务1:WS2812B彩灯控制和按键控制(arduino程序)
  8. 项目:小型局域网的搭建(基础知识+案例)
  9. 系统找不到指定路径,网络编程
  10. 分类变量 哑变量矩阵 指标矩阵_ML基础:协方差矩阵
  11. Attention-GAN
  12. ISCSI的target和initiator的部署
  13. 实践 基于Arduino 的 平衡车
  14. 2021腾讯社招java技术岗面试题
  15. 用CainAbel进行ARP欺骗和用Wireshark侦测ARP欺骗
  16. Linux系统Redis安装教程-附带后台启动
  17. Decoding tumour phenotype by noninvasive imaging using a quantitative radiomics approach
  18. 百度网盘高速下载器提示:高速受限!建议重新注册网盘账号使用
  19. Python坦克大战完整版
  20. 银河麒麟V10–忘记root密码怎么办

热门文章

  1. 【Bootstrap】(二)Bootstrap 网格系统
  2. mamp php ext,MAMP环境下安装php扩展
  3. 洛谷·幼儿园篮球题【including范德蒙德卷积,二项式反演
  4. [常用工具] dlib编译调用指南
  5. 现代软件工程_团队项目_阿尔法阶段_团队建设_第一次会议记录
  6. 人力资源?背完这个你肯定挂了
  7. java计算机毕业设计流浪狗领养系统源码+mysql数据库+系统+lw文档+部署
  8. ios16屏蔽系统更新
  9. 国家基础地理信息中心行政边界等矢量数据免费下载保姆级教程--关于地理数据收集与处理的基本工具推荐(7)
  10. iOS realm