Python获取网易云音乐的评论

图片

Python获取网易云音乐的评论_第1张图片

代码

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import json

def get_auction_detail():
    # 1. 采集页面并保存html(如已有可跳过)
    chrome_options = Options()
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--disable-blink-features=AutomationControlled')
    chrome_options.add_argument('--disable-extensions')
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument('--window-size=1920,1080')
    chrome_options.binary_location = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    chrome_options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
    
    # 启用性能日志
    chrome_options.set_capability('goog:loggingPrefs', {'performance': 'ALL'})

    try:
        print("正在初始化Chrome驱动...")
        service = Service(ChromeDriverManager().install())
        driver = webdriver.Chrome(service=service, options=chrome_options)
        print("Chrome驱动初始化成功")
        
        # 启用网络请求监听
        driver.execute_cdp_cmd('Network.enable', {})
        
        # 存储评论API的响应
        comment_responses = []
        
        print("访问网易歌曲...")
        driver.get("https://music.163.com/#/song?id=2711475385")
        
        # 等待页面加载完成
        time.sleep(5)
        
        # 获取所有网络请求
        logs = driver.get_log('performance')
        
        # 处理网络请求日志
        for entry in logs:
            try:
                log = json.loads(entry['message'])['message']
                if 'Network.responseReceived' in log['method']:
                    url = log['params']['response']['url']
                    if 'weapi/comment/resource/comments/get' in url:
                        request_id = log['params']['requestId']
                        # 获取响应体
                        response_body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})
                        if 'body' in response_body:
                            comment_data = {
                                'url': url,
                                'data': response_body['body']
                            }
                            comment_responses.append(comment_data)
                            print(f"成功捕获评论数据: {url}")
            except Exception as e:
                continue
        
        # 保存评论数据
        if comment_responses:
            with open('comment_data.json', 'w', encoding='utf-8') as f:
                json.dump(comment_responses, f, ensure_ascii=False, indent=2)
            print("评论数据已保存到 comment_data.json")
        else:
            print("未捕获到评论数据")
        
    except Exception as e:
        print(f"采集页面时发生错误: {e}")
    finally:
        try:
            driver.quit()
        except:
            pass

if __name__ == "__main__":
    get_auction_detail()

你可能感兴趣的:(Python获取网易云音乐的评论)