python3爬取网易云歌曲,利用python3爬取网易云周杰伦所有专辑,歌曲,评论,并完成可视-站长资讯中心...
时间: 2024-01-27 08:23:13 浏览: 174
首先,我们需要分析一下网易云音乐的网页结构,找到需要爬取的信息所在的位置。可以使用 Chrome 浏览器的开发者工具来帮助我们分析。
接下来,我们将使用 Python 3 和一些库来实现网易云音乐的爬取。
首先,我们需要安装 requests 和 BeautifulSoup 这两个库来帮助我们获取和解析网页内容。可以使用以下命令来安装:
```
pip install requests
pip install beautifulsoup4
```
然后,我们需要定义一个函数来获取网页内容并返回 BeautifulSoup 对象。代码如下:
```
import requests
from bs4 import BeautifulSoup
def get_html(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
return soup
```
接下来,我们需要获取周杰伦的所有专辑。我们可以使用以下代码来获取周杰伦的所有专辑的链接:
```
url = 'https://music.163.com/artist/album?id=6452'
soup = get_html(url)
album_list = soup.find('ul', {'class': 'm-cvrlst f-cb'}).find_all('a', {'class': 'msk'})
album_links = [link['href'] for link in album_list]
```
这段代码首先使用 get_html 函数获取网页内容,然后使用 BeautifulSoup 对象的 find 方法找到包含专辑链接的 ul 元素,再使用 find_all 方法找到所有包含链接的 a 元素,并将它们的 href 属性存储在一个列表中。
接下来,我们可以使用以下代码来获取每个专辑中的所有歌曲:
```
song_links = []
for album_link in album_links:
album_url = 'https://music.163.com' + album_link
album_soup = get_html(album_url)
song_list = album_soup.find('ul', {'class': 'f-hide'}).find_all('a')
song_links.extend([link['href'] for link in song_list])
```
这段代码首先循环所有专辑链接,然后使用 get_html 函数获取每个专辑的网页内容。接着,使用 BeautifulSoup 对象的 find 方法找到包含歌曲链接的 ul 元素,再使用 find_all 方法找到所有包含链接的 a 元素,并将它们的 href 属性存储在一个列表中。最后,将所有歌曲链接存储在一个列表中。
接下来,我们可以使用以下代码来获取每首歌曲的评论:
```
comments = []
for song_link in song_links:
song_url = 'https://music.163.com' + song_link
song_soup = get_html(song_url)
comment_list = song_soup.find('div', {'class': 'cmmts j-flag'}).find_all('div', {'class': 'cnt f-brk'})
comments.extend([comment.text for comment in comment_list])
```
这段代码首先循环所有歌曲链接,然后使用 get_html 函数获取每个歌曲的网页内容。接着,使用 BeautifulSoup 对象的 find 方法找到包含评论的 div 元素,再使用 find_all 方法找到所有评论,并将它们的 text 存储在一个列表中。最后,将所有评论存储在一个列表中。
最后,我们可以将所有专辑、歌曲和评论输出到一个 CSV 文件中:
```
import csv
with open('jay_chou.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['Album', 'Song', 'Comment'])
for i in range(len(album_links)):
album_url = 'https://music.163.com' + album_links[i]
album_soup = get_html(album_url)
album_name = album_soup.find('h2', {'class': 'f-ff2'}).text
song_list = album_soup.find('ul', {'class': 'f-hide'}).find_all('a')
for j in range(len(song_list)):
song_url = 'https://music.163.com' + song_list[j]['href']
song_soup = get_html(song_url)
song_name = song_soup.find('em', {'class': 'f-ff2'}).text
comment_list = song_soup.find('div', {'class': 'cmmts j-flag'}).find_all('div', {'class': 'cnt f-brk'})
for k in range(len(comment_list)):
comment = comment_list[k].text.strip()
writer.writerow([album_name, song_name, comment])
```
这段代码首先使用 csv 库创建一个 CSV 文件,并写入表头。接着,循环所有专辑链接,获取专辑名称和歌曲列表。然后,循环所有歌曲链接,获取歌曲名称和评论列表。最后,将专辑名称、歌曲名称和评论写入 CSV 文件中。
这样,我们就完成了利用 Python 3 爬取网易云周杰伦所有专辑、歌曲和评论的任务。
阅读全文