滑稽研究所
❂ END
![45beb1c408e0aeb1cb3c9ca22bdd4fee.gif](https://i-blog.csdnimg.cn/blog_migrate/e5e5b010bade27cebc1ca9999a69c758.gif)
python爬取网易云音乐
哈喽,大家好呀,我是滑稽君。本期我们在网易云爬取喜欢歌星的音乐。以我喜欢的许嵩为例。
![5822705e7dba0b036e72030af03340ca.gif](https://i-blog.csdnimg.cn/blog_migrate/eda6a4ed745f0d5c2eb3633097426073.gif)
视频讲解:
网页源代码:
我们检测网页源代码,搜索发现并不能找到我们歌单里的内容。但是选择检查却可以找到页面元素,这意味着我们需要对页面进行一些小小的处理。怎么处理?我们的浏览器帮我们解析了页面的源代码,所以我们可以看到下图这种形式,在下面的页面中我们可以直接使用xpath来爬取我们想要的内容。
也就是说我们要把原始页面解析成下图红圈中的elements模式,而lxml库中的etree功能可以帮我们把response.text解析成element的形式,完成转换之后就可以使用你喜欢的方法来匹配你需要的元素。
目标网址在复制时他会自动加上一个‘/#’,也算是一个小的爬手段,我们使用时记得把它去掉。分析完毕上代码。
代码:
import requestsfrom lxml import etreeurl = "https://music.163.com/artist?id=5771"furl = "http://music.163.com/song/media/outer/url?id="response = requests.get(url=url)print(response)html = etree.HTML(response.text)url_list = html.xpath('//a[contains(@href,"/song?")]/@href')[:50]name_list = html.xpath('//a[contains(@href,"/song?")]/text()')[:50]print(url_list)print(name_list)for i in url_list: xyy = furl + i.replace('/song?id=','') print(xyy) for h in name_list: xyz = requests.get(url=xyy) with open('./topmusic/%s.mp3' % h, 'wb') as file: file.write(xyz.content) print("下载成功" % h)
下载音乐的文件夹需要我们提前创建,下面我们来看看运行结果。点击文件可以播放,没有问题。
我之前尝试爬取网易云音乐时,总是返回一个空列表,原因就是没有使用lxml的etree功能解析页面转换成element格式,导致无法使用xpath匹配到我们想要的元素。不过在爬取QQ音乐时并未遇到这种问题。
![e2ae2396f4822bc3f17baae498295e77.gif](https://i-blog.csdnimg.cn/blog_migrate/e50b128a18cfdb5e5f4bc5c44c473d45.gif)
还有一些细节及易犯错的问题,请大家观看视频部分内容。
![7d01436da2db5b5faf4b875b2b51cc26.png](https://i-blog.csdnimg.cn/blog_migrate/a8bb0bd40b43974500d7cffe26144e1e.png)