python学习记录_网易云音乐爬虫(1)_热门歌手歌曲及ID

本文记录了使用Python进行网络爬虫,详细解析了如何获取网易云音乐的热门歌手信息及其对应的歌曲ID,涵盖了数据抓取与处理的关键步骤。

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

获取热门歌手信息:

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import csv

def get_html_src(url):
    driver = webdriver.Chrome()
    driver.get(url)
    #切换成frame
    driver.switch_to_frame("g_iframe")
    #休眠3秒等待加载
    time.sleep(3)
    #获取页面源
    page_src = driver.page_source
    driver.close()
    #print(page_src)
    return page_src



#解析网页
def parse_html_page(html):
    soup = BeautifulSoup(html,"lxml")
    items = soup.find('ul',id = 'm-artist-box').find_all('li')      #找到所有热门歌手所在位置
    return items




#保存csv文件

def write_to_csv(items):
    with open("music163_artists.csv",'w',newline='',encoding="utf-8") as csvfile: #  newline = '' ,可避免空行
        writer= csv.writer(csvfile)
        for item in items:
            artist_id = item.a['href'].replace('/artist?id=', '')  # 查找歌手id
            artist_name = item.a['title'].rstrip("的音乐")  # 歌手姓名
            print(artist_id, artist_name)
            writer.writerow([artist_name,artist_id])
    csvfile.close()





html = get_html_src('https://music.163.com/#/discover/artist')

items = parse_html_page(html)

write_to_csv(items)

获取热门歌手歌曲:

#获取页面代码
def get_html_src(url):
    driver = webdriver.Chrome()
    driver.get(url)
    #切换成frame
    driver.switch_to_frame("g_iframe")
    #休眠3秒等待加载
    time.sleep(3)
    #获取页面源
    page_src = driver.page_source
    driver.close()
    #print(page_src)
    return page_src


#get_html_src('https://music.163.com/#/artist?id=6731')

#解析页面
def parse_html_page(html):
    # pattern = '<span class="txt"><a href="/song?id=(\d*)"><b title="(.*?)">'
    # 这里是使用lxml解析器进行解析,lxml速度快,文档容错能力强,也能使用html5lib
    soup = BeautifulSoup(html,"lxml")
    items = soup.find_all('span','txt')

    return items


#写入CSV文件

def write_to_csv(items,artist_name):
    with open("music163_songs.csv","a",encoding="utf-8") as csvfile:#需要设置编码
        writer = csv.writer(csvfile)
        writer.writerow(["歌手名字",artist_name])

        for item in items:
            writer.writerow([item.a['href'].replace('/song?id=',''),item.b['title']])

            print('歌曲ID:',item.a['href'].replace('/song?id=',''))

            song_name = item.b['title']

            print('歌曲名字:',song_name)
    csvfile.close()



#读取歌手文件

def read_csv():
    with open(r"E:\pyobject\music\music163_artists.csv","r",encoding="utf-8") as csvfile:
        reader = csv.reader(csvfile)
        for row in reader:
            artist_name,artist_id = row
            yield artist_name,artist_id



#程序主函数

for readcsv in read_csv():

    artist_name, artist_id = readcsv
    url = 'https://music.163.com/#/artist?id='+str(artist_id)
    print("正在加载{}的音乐".format(artist_name))
    html = get_html_src(url)
    items = parse_html_page(html)
    write_to_csv(items,artist_name)
    print("{}的歌曲写入完成".format(artist_name))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值