Python爬取网易云音乐歌单名以及歌单标签

爬取网易云音乐歌单名以及歌单标签

 

正则表达式

.可以匹配任意字符,所以:要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符。

匹配特殊字符,如:要匹配 * 字符,请使用 \*

步骤

  • 2.按F12,进入开发者模式,点击Network,按F5刷新网页,出现以下界面

  • 3.在右侧name列表下,找到playlist,从中可以找到各个歌单名以及歌单名的id(id是为了进入歌单的所在网址)

  • 4.编写正则表达式,爬取歌单id
pat1 = r'playlist\?id=(\d*?)" class="t'
result_id = re.compile(pat1).findall(html)  # 用正则表达式进行筛选id
  • 5.用爬到的id编写歌单的网址,经发现,各个歌单的网址除了id部分,其余都是“https://music.163.com/#/playlist?id=
  • 6.进入歌单网址,同上述第二个步骤:按F12,进入开发者模式,点击Network,按F5刷新网页,出现以下界面,找到playlist?id=XXXXX。

  • 7.编写正则表达式,提取标签,详情请看代码。

代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import re
import urllib.request
import urllib.error
import urllib.parse


def get_all_hotSong(url):
    header={    #请求头部
        'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    request=urllib.request.Request(url=url, headers=header)
    html=urllib.request.urlopen(request).read().decode('utf-8')   #打开url
    html=str(html)     #转换成str

    pat1 = r'playlist\?id=(\d*?)" class="t'
    result_id = re.compile(pat1).findall(html)  # 用正则表达式进行筛选id
    print(result_id)

    pat2=r'<a title="(.*?)" href="/playlist\?id=\d*?" class="t'
    result_name = re.compile(pat2).findall(html)  # 用正则表达式进行筛选歌单名字name
    print(result_name)

    return result_name,result_id

def get_Lables(url):
    header={    #请求头部
   'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
    request = urllib.request.Request(url=url, headers=header)
    html = urllib.request.urlopen(request).read().decode('utf-8')  # 打开url
    html = str(html)  # 转换成str

    print(url)
    pat=r'<meta name="keywords" content="(.*?)" />\n<meta name="description"'
    result_label = re.compile(pat).findall(html)  # 用正则表达式进行筛选
    print(result_label)

    return result_label

fhandle = open('./labels.txt', 'a', encoding='utf-8')  # 写入文件
for i in range(0,38):#(0,38)
    n=35*i
    url='https://music.163.com/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset='+str(n)
    print(url)
    name,id=get_all_hotSong(url)  #获取所有歌单名称和id
    num=0
    for j in id:        #遍历歌单
        t_url='https://music.163.com/playlist?id='+j
        label_=get_Lables(t_url)    #['歌单名,创作者,标签1,标签2···']
        ss=''.join(label_)          #'歌单名,创作者,标签1,标签2···'
        all=[]
        all=ss.split(',')           #切分字符串 ['歌单名','创作者','标签1','标签2',```]
        print(all)
        ns=name[num].count(',',0,len(name[num]))        #歌单名中拥有的逗号的数量
        print(ns)
        x=0
        while x<ns+1:       #清除all里面的歌单名
            t=all.pop(0)
            #print(all.pop(0))
            x+=1
        t=all.pop(0)    #清除all里面的创作者
        print(all)
        num+=1
        ls1=[str(ii+' ') for ii in all]
        ls2=''.join(ls1)        #将歌单列表转化成字符串形式保存到文件中
        print('ls1= ',end='')
        print(ls1)
        print(ls2)
        fhandle.write(ls2+'\n')

fhandle.close() #关闭文件

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值