Python爬虫获取网易云音乐 我的喜欢歌单 歌曲数据

需求:突然奇想,获取网易云音乐 我的喜欢 歌单音乐数据

获取歌曲详情 如标题,歌手,时长,专辑等等

思路: 爬虫请求url 获取数据,找到对的链接请求就成功了一半,查看返回数据,然后保存数据(歌曲+歌手 拼接完成),也可以进行下载之类的操作,爬虫进行伪装,增加Referer头,User-Agent等等

工具: Python3.7 + Pycharm
模块: BeautifulSoup + requests + lxml

1、 打开网页版网易云音乐
第一步
2、 打开 我喜欢的音乐(点击第一步中的头像图片即可进入)
第二步
3、 打开调试工具(浏览器上方的链接不可信,要自己找歌曲列表链接)
第三步
4、 查看返回的数据
第四步
5、 目前仅返回有限的数据,开始撸代码

import requests
from bs4 import BeautifulSoup
import urllib.request
from lxml import html

etree = html.etree

headers = {
    "Referer": "https://music.163.com/",
    "Host": "music.163.com",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
}

# 歌单url  通过网易云获取自己的链接
play_url = "https://music.163.com/playlist?id=******&userid=******"

# 请求url
response = requests.get(play_url, headers=headers).content

# 使用bs4匹配出对应的歌曲名称以及地址
s = BeautifulSoup(response, "lxml")
main = s.find("ul", {"class": "f-hide"})
# print(main.find_all("a"))
lists = []
for music in main.find_all("a"):
    music_list = []
    musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3'
    musicName = music.text

    music_list.append(musicName)
    music_list.append(musicUrl)
    # 全部歌曲信息放在lists列表中
    lists.append(music_list)

    # lists = str(lists)
    # 保存歌曲名称以及歌曲url
    with open("music_list.txt", "a", encoding="utf-8") as f:
        f.write(musicName + "-" + musicUrl + "\n")


# 下载列表中的全部歌曲,并以歌曲名命名下载后的文件,文件位置为当前文件夹
"""
for i in lists:
    url = i[1]
    name = i[0]
    try:
        print('正在下载', name)
        #这里修改路径,随便指定盘符
        urllib.request.urlretrieve(url, 'F:/歌曲/%s.mp3' % name)
        print('下载成功')
    except:
        print('下载失败')
"""

总结: 只能说获取到一些数据,而且写法粗糙,也没有封装函数等,由于嵌套网页iframe的原因,使用js生成的数据,暂时没有办法去获取到,需要进行研究研究(想要直接保存网页,然后进行提取数据,但是没有正确的请求接口),若有不足,虚心请教
在这里插入图片描述

参考链接:https://www.jianshu.com/p/4e96f8466261
参考链接2:https://blog.csdn.net/qq_43590972/article/details/101344918

基于Python Scrapy实现的网易云音乐music163数据爬取爬虫系统 含全部源代码 基于Scrapy框架的网易云音乐爬虫,大致爬虫流程如下: - 以歌手页为索引页,抓取到全部歌手; - 从全部歌手页抓取到全部专辑; - 通过所有专辑抓取到所有歌曲; - 最后抓取歌曲的精彩评论。 数据保存到`Mongodb`数据库,保存歌曲的歌手,歌名,专辑,和热评的作者,赞数,以及作者头像url。 抓取评论者的头像url,是因为如果大家喜欢,可以将他做web端。 ### 运行: ``` $ scrapy crawl music ``` #!/usr/bin/python #-*-coding:utf-8-*- import time from pprint import pprint from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector from scrapy.http import Request from woaidu_crawler.items import WoaiduCrawlerItem from woaidu_crawler.utils.select_result import list_first_item,strip_null,deduplication,clean_url class WoaiduSpider(BaseSpider): name = "woaidu" start_urls = ( 'http://www.woaidu.org/sitemap_1.html', ) def parse(self,response): response_selector = HtmlXPathSelector(response) next_link = list_first_item(response_selector.select(u'//div[@class="k2"]/div/a[text()="下一页"]/@href').extract()) if next_link: next_link = clean_url(response.url,next_link,response.encoding) yield Request(url=next_link, callback=self.parse) for detail_link in response_selector.select(u'//div[contains(@class,"sousuolist")]/a/@href').extract(): if detail_link: detail_link = clean_url(response.url,detail_link,response.encoding) yield Request(url=detail_link, callback=self.parse_detail) def parse_detail(self, response): woaidu_item = WoaiduCrawlerItem() response_selector = HtmlXPathSelector(response) woaidu_item['book_name'] = list_first_item(response_selector.select('//div[@class="zizida"][1]/text()').extract()) woaidu_item['author'] = [list_first_item(response_selector.select('//div[@class="xiaoxiao"][1]/text()').extract())[5:].strip(),] woaidu_item['book_description'] = list_first_item(response_selector.select('//div[@class="lili"][1]/text()').extract()).strip() woaidu_item['book_covor_image_url'] = list
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值