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

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

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

1.打开qq音乐的首页,点击排行榜,右键,检查(谷歌浏览器,其他浏览器各有不同,360浏览器为:审查元素)。
python使用scrapy爬取qq音乐(一)_第1张图片

2.右键,检查:
python使用scrapy爬取qq音乐(一)_第2张图片

3.
我们要分析所有向后台发出的请求,找出有用的url。点击Network,然后刷新页面。我们会看到有很多请求。
我们对所有的请求进行过滤和筛选,此时选用最笨的方法,手动查找,点击Response,只查看返回的信息。然后依次点击,左侧请求,查找有用的请求数据
python使用scrapy爬取qq音乐(一)_第3张图片
4.我们看到,当点击fcg_v8_toplist_opt.fcg?……….时,右边的response中出来一串数据,当然,出来类似数据的有那么几条请求,此时就需要一个个的点开查看了。看看有没有我们想要的或者相关的数据。这时,我们可以点击Preview更方便的进行查看
python使用scrapy爬取qq音乐(一)_第4张图片
这里的我们可以获取到每个榜单的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

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

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

除了上面的请求有我们需要的数据外,我们查找的过程中,还发现一个请求返回的数据有歌曲的信息。python使用scrapy爬取qq音乐(一)_第7张图片

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¬ice=0&platform=yqq&needNewCode=0

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

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

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

你可能感兴趣的:(python爬虫)