python爬虫爬取豆瓣音乐top250完整代码并连接MySQL数据库实现词云图可视化
时间: 2023-06-16 18:06:02 浏览: 242
以下是完整代码:
```python
import requests
from bs4 import BeautifulSoup
import pymysql
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 连接MySQL数据库
db = pymysql.connect(host='localhost', user='root', password='password', port=3306, db='douban_music')
cursor = db.cursor()
# 创建表格
sql = 'CREATE TABLE IF NOT EXISTS music (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), artist VARCHAR(255), rating FLOAT, num_of_comments INT)'
cursor.execute(sql)
# 爬取音乐排行榜
url = 'https://music.douban.com/top250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
music_list = soup.find_all('tr', class_='item')
# 将数据存入MySQL数据库
for music in music_list:
name = music.find_all('a')[1].text.strip()
artist = music.find_all('p')[0].text.strip().split('/')[0]
rating = float(music.find_all('span', class_='rating_num')[0].text.strip())
num_of_comments = int(music.find_all('span', class_='pl')[0].text.strip().split()[1][:-3])
sql = 'INSERT INTO music(name, artist, rating, num_of_comments) values(%s, %s, %s, %s)'
cursor.execute(sql, (name, artist, rating, num_of_comments))
db.commit()
# 从MySQL数据库中读取数据并生成词云图
sql = 'SELECT name FROM music'
cursor.execute(sql)
results = cursor.fetchall()
text = ''
for result in results:
text += result[0] + ' '
wordcloud = WordCloud(background_color='white', width=800, height=600, margin=2, font_path='msyh.ttc').generate(text)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
# 关闭数据库连接
cursor.close()
db.close()
```
这段代码首先连接MySQL数据库并创建一个名为“music”的表格,然后爬取豆瓣音乐Top250页面上的音乐信息,并将这些信息存入MySQL数据库中。最后,从数据库中读取音乐名称,将它们拼接成一个字符串,并生成一个词云图,用于展示所有音乐的名称。
请确保在运行代码之前已经安装了以下库:
- requests
- bs4
- pymysql
- wordcloud
- matplotlib
在生成词云图之前,需要先下载并安装微软雅黑字体(msyh.ttc),可以在以下网址下载:https://www.fontpalace.com/font-download/Microsoft+YaHei/
在运行代码之前,需要先修改数据库连接信息,将用户名、密码、端口号和数据库名称改为您自己的信息。
阅读全文