python使用scrapy爬取qq音乐(二)

听一首还不错的歌曲

1.有点累?那么好,来歇息一下,听一首歌。
taofen男孩
突然看到tf男孩的歌曲,你说啥?e_e,这个不要紧,来,点进去听一下,(事实是我听了一下下就换了首自己喜欢的歌)。就是这么任性。
凉凉
点击,播放。就这么神奇,你一点击,它就播放了,熟悉js的知道,这应该是触发了一个事件,然后向后台发送请求,在反回来歌曲的数据,我们要是知道它向后台发出的什么请求就好了。如果知道的话, 我们就能拿到数据了啊。
休息之余,忍不住又看了下请求数据的情况:
清除信息
先点击图中标记的图标,清除已有的信息。然后刷新页面,此时,出现了一堆请求。但要知道的是,刷新后,页面中的歌曲还没有播放。也就是此时,这首歌曲的文件还没有缓存过来。一旦我们点击播放,才会从后台的数据库中加载音乐。
2.此刻我们点击图标,清除请求信息,如果页面加载慢,一直不断请求,就多清除几次,一定要保证没有播放音乐的情况下去清除。然后播放音乐,就会看到有几个新的请求。
歌曲的url
3.我们看到此时的请求也就十多个,这么少最好不过了。突然发现时间线部分,有一条长,长,长———的线,这莫不是传说中的飞机线,不,不对,这应该是这首歌的的请求信息了,线这么长,持续时间这么久,这是多大的文件才加载这么长时间啊,整个页面上的大文件也就是歌曲文件了。就是它了,别跑。
我们点击绿色选中部分,筛选出这条请求。
歌曲url
点击这个请求,发现它并没有response,怎么回事,推断错了?我们看看它的请求是什么,从headers中或者从右键拷贝,拿到完整的请求的url。复制到浏览器地址栏。回车。
歌曲
功夫不负有心人。完成。

歌曲url是怎么来的

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

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

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

可以看出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

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

我们尝试拿到其他歌曲的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的分析到这就结束了,有基础的小伙伴看到这应该能写出爬音乐的爬虫了。当然是用神马工具这都是小意思啦。都可以写出来,只不过性能上有些差别。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Scrapy 爬取南京天气预报的示例: 1. 创建 Scrapy 项目 在命令行中输入以下命令: ``` scrapy startproject nanjing_weather cd nanjing_weather ``` 2. 创建爬虫 在命令行中输入以下命令: ``` scrapy genspider nanjing www.weather.com.cn ``` 这将在 `nanjing_weather/spiders` 目录下创建一个名为 `nanjing.py` 的文件,用于定义爬虫。 3. 编写爬虫代码 打开 `nanjing.py` 文件,将以下代码粘贴到文件中: ```python import scrapy class NanjingWeatherSpider(scrapy.Spider): name = 'nanjing' allowed_domains = ['www.weather.com.cn'] start_urls = ['http://www.weather.com.cn/weather/101190101.shtml'] def parse(self, response): # 获取天气信息 weather_info = response.xpath('//div[@id="7d"]/ul/li') for info in weather_info: date = info.xpath('h1/text()').get() weather = info.xpath('p[@class="wea"]/text()').get() temperature = info.xpath('p[@class="tem"]/span/text()').get() + info.xpath('p[@class="tem"]/i/text()').get() wind = info.xpath('p[@class="win"]/i/text()').get() yield { 'city': '南京', 'date': date, 'weather': weather, 'temperature': temperature, 'wind': wind, } ``` 以上代码定义了一个名为 `NanjingWeatherSpider` 的爬虫,首先在 `start_urls` 中定义了南京天气预报页面的链接,然后在 `parse` 方法中获取天气信息,并将数据以字典的形式返回。 4. 运行爬虫 在命令行中输入以下命令: ``` scrapy crawl nanjing -o nanjing_weather.json ``` 这将运行爬虫并将爬取到的数据保存到 `nanjing_weather.json` 文件中。 以上就是一个简单的 Scrapy 爬取南京天气预报的示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值