Python获取网易云音乐的评论
图片
代码
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 jsondef 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:passif __name__ == "__main__":get_auction_detail()