Python爬虫实战:Tkinter酷狗音乐数据爬取与可视化
Python爬虫实战:Tkinter酷狗音乐数据爬取与可视化
想学习如何使用Python爬取酷狗音乐数据,并用Tkinter构建一个图形界面来展示结果吗?本文将带你一步步实现这个项目。
项目目标:
- 设计一个Tkinter窗体应用系统,用于爬取酷狗音乐数据并进行可视化展示。* 用户可以在界面输入歌手名,程序自动爬取该歌手的歌曲信息。* 爬取的歌曲信息将保存到SQLite数据库和Excel表格中。* 利用jieba和WordCloud库生成词云图,直观地展示歌曲标题的关键词。
涉及的Python库:
- requests: 用于发送HTTP请求,获取网页内容。* BeautifulSoup4: 用于解析HTML网页,提取所需数据。* lxml: 作为BeautifulSoup的解析器,提高解析效率。* sqlite3: 用于操作SQLite数据库,存储数据。* jieba: 用于中文分词,将文本分割成词语。* WordCloud: 用于生成词云图,可视化文本数据。* openpyxl: 用于操作Excel表格,存储数据。* Tkinter: 用于创建图形界面,与用户交互。
**Python代码实现:**pythonimport requestsfrom bs4 import BeautifulSoupimport sqlite3import jiebafrom wordcloud import WordCloudimport openpyxlfrom tkinter import *from tkinter import messagebox
创建窗体root = Tk()root.title('酷狗音乐数据爬取')root.geometry('400x300')
创建标签和输入框label1 = Label(root, text='请输入歌手名:')label1.pack()entry1 = Entry(root)entry1.pack()
创建按钮def crawl(): # 获取输入框中的歌手名 singer = entry1.get() if not singer: messagebox.showerror('错误', '请输入歌手名') return
# 爬取酷狗音乐数据 url = 'https://www.kugou.com/yy/singer/index/{}-all-1.html'.format(singer) response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') songs = soup.select('.song_name a') song_titles = [song.get('title') for song in songs]
# 保存歌曲信息到SQLite数据库 conn = sqlite3.connect('songs.db') c = conn.cursor() c.execute('CREATE TABLE IF NOT EXISTS songs (title TEXT)') for title in song_titles: c.execute('INSERT INTO songs (title) VALUES (?)', (title,)) conn.commit() conn.close()
# 生成词云图 c = conn.cursor() c.execute('SELECT * FROM songs') titles = [row[0] for row in c.fetchall()] text = ' '.join(jieba.cut(' '.join(titles))) wordcloud = WordCloud(background_color='white').generate(text) wordcloud.to_file('wordcloud.png')
# 保存歌曲信息到Excel表中 wb = openpyxl.Workbook() sheet = wb.active for i, title in enumerate(titles): sheet.cell(row=i+1, column=1, value=title) wb.save('songs.xlsx')
# 显示处理后的信息 messagebox.showinfo('信息', '已保存歌曲信息到SQLite数据库、Excel表和词云图')
button1 = Button(root, text='爬取数据', command=crawl)button1.pack()
root.mainloop
原文地址: https://www.cveoy.top/t/topic/f1dF 著作权归作者所有。请勿转载和采集!