Python爬虫项目分享一:《爬取周杰伦的歌曲清单》

python爬取周杰伦的歌曲清单

偶得一不错的爬虫教程,现博客分享,想要获取完整教程,加V:ff17328081445。文章为系列文章,持续更新,欢迎关注。

浏览器分析网页

#打开QQ音乐网址(首页搜索周杰伦)
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E5%91%A8%E6%9D%B0%E4%BC%A6
#敲击键盘F12,然后点击Network,F5刷新网页。

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第1张图片

Network面板的应用

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第2张图片

从上往下,只看我圈起来的内容的话,它有四行信息。下面,我来为你介绍它。

第1行的左侧,红色的圆钮是启用Network监控(默认高亮打开),灰色圆圈是清空面板上的信息。
右侧勾选框Preserve log,它的作用是“保留请求日志”。如果不点击这个,当发生页面跳转的时候,记录就会被清空。所以,我们在爬取一些会发生跳转的网页时,会点亮它。

第2行,是对请求进行分类查看。我们最常用的是:ALL(查看全部)/XHR(仅查看XHR,我们等会重点讲它)/Doc(Document,第0个请求一般在这里),
有时候也会看看:Img(仅查看图片)/Media(仅查看媒体文件)/Other(其他)。

最后,JSCSS,则是前端代码,负责发起请求和页面实现;Font是文字的字体;而理解WS和Manifest,需要网络编程的知识,倘若不是专门做这个,你不需要了解。

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第3张图片

什么是XHR?

在Network中,有一类非常重要的请求叫做XHR(当你把鼠标在XHR上悬停,你可以看到它的完整表述是XHR and Fetch)。

这个,叫做Ajax技术(技术本身和爬虫关系不大,在此不做展开,你可以通过搜索了解)。应用这种技术,
好处是显而易见的——更新网页内容,而不用重新加载整个网页。又省流量又省时间的,何乐而不为。

如今,比较新潮的网站都在使用这种技术来实现数据传输。只剩下一些特别老,或是特别轻量的网站,还在用老办法——加载新的内容,
必须要跳转一个新网址。

XHR的应用

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第4张图片
Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第5张图片

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第6张图片
Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第7张图片

#至此,我们已经在浏览器找到要爬取歌曲名。如何爬取?且看以下分析。

Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第8张图片
Python爬虫项目分享一:《爬取周杰伦的歌曲清单》_第9张图片

代码实现

#利用requests.get()访问这个链接,把这个字典下载到本地。然后去一层一层地读取,拿到歌曲名
#!/usr/bin/python3
import requests
# 引用requests库
res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0')
# 调用get方法,下载这个字典
json_music = res_music.json()
# 使用json()方法,将response对象,转为列表/字典
# 我们在XHR里查看到的列表/字典,严格来说其实它不是列表/字典,它是json。需要转化,否则python无法提取数据。

------------------------------------------------------------
#!/usr/bin/python3
import requests
# 引用requests库
res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0')
# 调用get方法,下载这个字典
json_music = res_music.json()
# 使用json()方法,将response对象,转为列表/字典
list_music = json_music['data']['song']['list']
# 一层一层地取字典,获取歌单列表
for music in list_music:
# list_music是一个列表,music是它里面的元素
    print(music['name'])
    # 以name为键,查找歌曲名

>>>>>>>>>>>>>>>>>>>>>>>>
说好不哭(with 五月天阿信)
一路向北
晴天
七里香
听妈妈的话
等你下课(with 杨瑞代)
稻香
告白气球
爱的飞行日记
搁浅
不能说的秘密
夜曲
青花瓷
以父之名
给我一首歌的时间
简单爱
半岛铁盒
彩虹
说好的幸福呢
轨迹

------------------------------------------------------------
#如果对这个程序稍加延展,它就能拿到:歌曲名、所属专辑、播放时长,以及播放链接。因为这些信息都在那个XHR里。
#!/usr/bin/python3
import requests
# 引用requests库
res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0')
# 调用get方法,下载这个字典
json_music = res_music.json()
# 使用json()方法,将response对象,转为列表/字典
list_music = json_music['data']['song']['list']
# 一层一层地取字典,获取歌单列表
for music in list_music:
# list_music是一个列表,music是它里面的元素
    print(music['name'])
    # 以name为键,查找歌曲名
    print('所属专辑:'+music['album']['name'])
    # 查找专辑名
    print('播放时长:'+str(music['interval'])+'秒')
    # 查找播放时长
    print('播放链接:https://y.qq.com/n/yqq/song/'+music['mid']+'.html\n\n')
    # 查找播放链接

>>>>>>>>>>>>>>>>>>>>>>>>
说好不哭(with 五月天阿信)
所属专辑:说好不哭(with 五月天阿信)
播放时长:222秒
播放链接:https://y.qq.com/n/yqq/song/001qvvgF38HVc4.html


一路向北
所属专辑:J III MP3 Player
播放时长:295秒
播放链接:https://y.qq.com/n/yqq/song/001xd0HI0X9GNq.html

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