网易云歌单信息爬取及数据分析(1)爬虫部分

本文介绍了如何使用Python爬取网易云音乐的歌单信息,包括歌单广场的URL获取和歌单详情页的数据解析。通过观察和分析网页结构,利用jsoup库抓取所需数据,如歌单名、播放次数等。在整合数据过程中,使用了多线程来提高爬取效率。文章强调了headers的重要性,并预告了后续的数据分析部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬虫思路:

网页分为两个部分,歌单广场和歌单详情页。总体思路是先从歌单广场获取所有的URL然后去详情页进行解析。
最后的数据大概这个样子:

歌单广场:

在广场中需要实现获取所有歌单详情页的URL链接。

研究URL不难发现这样的规律,改变cat可以换歌单的大分类(华语,流行,全部等),limit是每页显示35个歌单,这里是第二页所以offset是35*2=70。那么只需要采用for循环就可以。

右键打开检查我们可以发现关于歌单详情页URL就在a标签下面herf,之后beautifulsoup就可以获取,查看一下具体歌单详情页的URL确实是这样,只需要做一下字符串的拼接就可以了。

下面是代码:

import requests as rq
from bs4 import BeautifulSoup
import pandas as pd 
import numpy as np
import time
import concurrent.futures 
from multiprocessing.dummy import Pool as pool
##后面所有的代码都是调的这些个库,我习惯写pd np因为懒。。。
list1=[]
headers = {
   
    'Referer': 'http://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/62.0.3202.75 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    }

def getHTMLText(url,headers): #通用的获取网站内容的框架
    try:
        r = rq.get(url,headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "网络解析错误"


def get_url(cat):#获取首页该分类下面的歌单url,形成url_list
    depth=38
    start_url='https://music.163.com/discover/playlist/?order=hot&cat='+cat
    for i in range(depth):
        try:
            url=start_url+'&limit=35'+'&offset='+str(35*(i+1))
            html=getHTMLText(url,headers)
            parse_main(html)
        except:
            print('失败')
            continue


def parse_main(html):#解析每个广场页,bs4弄出来歌单名,歌单URL
    soup=BeautifulSoup(html,'html.parser')
    c=soup.find_all('li')
    for unit in c:
        try:
            name_url=unit.find('a',{
   'class':"tit f-thide s-fc0"})#m这里有URL,名字的信息
            number=eval(unit.find('span',{
   'class':'nb'}).text.replace('万','0000'))#这里获取的是播放量的信息,用于初步筛选
            list1=[name_url['title'].replace(u'\xa0', u' '),number,name_url['href']]
            url_list.append(list1)
        except:
            continue

弄出来list1大概这个样子:
[歌单名,播放次数,URL]
之后按照每个URL进入相应的详情页解析就可以了。

歌单详情页:

需要获取具体信息:

这里渴望拿到的是所属标签,播放次数,转发次数,收藏次数,评论量,歌单标题和歌单长度。他们的解析途径都差不多,都是beautifulsoup。我们可以看一个:

不难看到总共有两个属性,都在div标签下的a标签下的i,我们根据特征找到左右class为u-tag的标签然后弄出来它的text就行了。

tags=soup.find_all('a',{
   'class':'u-tag'})
##中间有省略
tag1=tags[0].text.replace(u'\xa0', u' ')

下面是具

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值