Python爬虫爬取网易云评论

本爬虫代码能够爬取网易云音乐的评论,并将获取的评论信息保存到Navicat数据库中。下面是具体的实现方法。

找到含有评论的信息。

将user-agent替换成自己电脑中的。

将画线部分替换成想要爬取的音乐的id,往往在网址中就含有id。

此部分内容可以删除,但是要删除代码中对应的内容。

代码中设置了计数器,可以根据自己的需求对计数器进行删除或者修改。

将数据库的用户名和密码修改为自己的,然后就可对评论进行爬取了。

import requests
import time
import json
import datetime
import pymysql
#获取网易云所有评论(感动)用这个

headers = {#设置请求头模仿浏览器请求
    'Host': 'music.163.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62'
}


def get_comments(songId, offset):#获取指定歌曲的评论
    url = 'http://music.163.com/api/v1/resource/comments/R_SO_4_{0}?limit=100&offset={1}'.format(songId, str(offset))
    response = requests.get(url=url, headers=headers)#向构造的URL发送一个HTTP GET请求
    result = json.loads(response.text)#将响应内容转换为JSON格式,response.text获取响应内容

    if 'comments' in result:#判断result中是否含有comments
        temp = []#创建了一个空列表,用于存储提取后的评论数据
        for item in result['comments']:#遍历comments中的评论
            data = {}#创建了一个空字典,用于存储当前评论的所有数据
            data['userId'] = item['user']['userId']
            data['nickname'] = item['user']['nickname']
            data['content'] = item['content'].replace("\n", ",")
            timeArray = time.localtime(item['time'] / 1000)
            date = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
            data['date'] = date
            data['likedCount'] = item['likedCount']
            data['category'] = '感动'  # 设置固定的分类值
            data['url'] = 'https://music.163.com/song?id=1465313631'
            data['title'] = '化身孤岛的鲸'
            temp.append(data)#将提取后的数据字典添加到临时列表中
        return temp
    else:
        print("No comments found in the response.")
        return []


if __name__ == '__main__':
    db = pymysql.connect(
        host='localhost',
        user='用户名',
        password='密码',
        db='comments',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor,
        #指定游标类型为DictCursor,这意味着游标将返回字典对象而不是元组,这样可以更方便地处理SQL查询结果
    )
    cursor = db.cursor()#创建了一个游标对象,用于执行数据库操作

    # 检查表是否存在
    table_name = "cs2"
    check_sql = f"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{table_name}'"
    cursor.execute(check_sql)
    result = cursor.fetchone()#获取查询后的结果
    if result is None:
        # 创建表
        create_table_sql = """CREATE TABLE cs2 (
                                  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                  userId BIGINT(20),
                                  nickname VARCHAR(255),
                                  content TEXT,
                                  date TIMESTAMP,
                                  likedCount INT(11),
                                  category VARCHAR(255)
                                )"""
        cursor.execute(create_table_sql)

    offset = 0
    count = 0  # 计数器
    while True:
        temps = get_comments("1465313631", offset)
        if len(temps) == 0 or count >= 200:  # 当获取的评论数量达到200或者已经爬取完所有评论时停止
            break
        for temp in temps:
            # 检查评论是否已经存在
            check_sql = "SELECT * FROM cs2 WHERE userId=%s AND content=%s"
            cursor.execute(check_sql, (temp['userId'], temp['content']))
            result = cursor.fetchone()
            if result is None:#评论不存在
                # 插入数据
                insert_sql = """INSERT INTO cs2 (userId, nickname, content, date, likedCount, category, url, title) 
                                VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"""
                cursor.execute(insert_sql, (
                    temp['userId'],
                    temp['nickname'],
                    temp['content'],
                    temp['date'],
                    temp['likedCount'],
                    temp['category'],  # 插入 category 列数据
                    temp['url'],
                    temp['title']
                ))
                db.commit()
                count += 1  # 每插入一条数据,计数器加一

        offset += 20

    db.close()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫抓取网易云音乐评论通常涉及以下几个步骤: 1. **安装库**:首先需要安装`requests`, `BeautifulSoup4`等库,用于发送HTTP请求和解析HTML内容。 2. **发送GET请求**:使用`requests.get('https://music.163.com/song/comments?id=歌曲ID')`获取特定歌曲的评论页面数据,这里的`歌曲ID`替换为你想要爬取的实际歌曲ID。 3. **解析HTML**:通过BeautifulSoup库解析网页源码,找到评论列表部分,这通常包含在JavaScript渲染后的DOM中。可能需要使用如`Selenium`这样的工具配合`html.parser`或`lxml`解析器。 4. **处理数据**:提取出每条评论的文字、用户信息(用户名、头像链接等)、发表时间等信息,可以存储到CSV、JSON或数据库中。 5. **反爬策略**:注意遵守网站的Robots协议,避免过于频繁的请求导致被封IP,可以设置延迟或者代理IP来提高稳定性。 ```python import requests from bs4 import BeautifulSoup def get_comments(song_id): 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' } url = f'https://music.163.com/song/comments?id={song_id}' response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'lxml') comment_list = soup.find('div', {'class': 'comment-list'}) for comment in comment_list.find_all('li'): # 提取评论信息并处理... return comments_data else: print(f"请求失败,状态码:{response.status_code}") # 使用函数并保存结果 comments_data = get_comments(歌曲ID) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值