当前位置: 首页 > news >正文

YouTube 视频评论,并插入 MySQL

# -*- coding: utf-8 -*-
"""
使用 DrissionPage 爬取 YouTube 视频评论,并插入 MySQL
优化版:复用浏览器、精准选择器、滚动加载、异常处理
"""import pandas as pd
from DrissionPage import ChromiumPage
import pymysql
import time
import logging# ------------------- 配置区 -------------------
file_path = 'youtube.xlsx'  # Excel 文件路径
sheet_name = 0  # 工作表名称或索引
db_config = {'host': 'localhost','user': 'root','password': '123457','database': 'youtube_db','charset': 'utf8mb4','autocommit': True
}
# ---------------------------------------------# 设置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 读取 Excel
df = pd.read_excel(file_path, sheet_name=sheet_name)
video_urls = df['yt-lockup-view-model__content-image href'].dropna().tolist()# 创建浏览器(复用)
page = ChromiumPage()
logging.info("浏览器已启动")# 数据库连接
try:connection = pymysql.connect(**db_config)cursor = connection.cursor()logging.info("数据库连接成功")
except Exception as e:logging.error(f"数据库连接失败: {e}")exit(1)# 创建表(如果不存在)
create_table_sql = """
CREATE TABLE IF NOT EXISTS commentes (id INT AUTO_INCREMENT PRIMARY KEY,video_url VARCHAR(255) NOT NULL,author VARCHAR(255) NOT NULL,comment TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 移除末尾的逗号
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
"""
cursor.execute(create_table_sql)
connection.commit()
logging.info("数据表检查/创建完成")# 遍历每个视频链接
for idx, url in enumerate(video_urls):logging.info(f"正在处理第 {idx + 1}/{len(video_urls)} 个视频: {url}")items = []try:# 访问视频页page.get(url)time.sleep(3)# 等待评论区加载(通过评论区标题判断)if not page.ele('#content-text', timeout=10):logging.warning(f"评论区未找到: {url}")continue# 第一次滚动到评论区page.scroll(500)time.sleep(3)# 尝试点击“查看更多”按钮(如果有)for _ in range(15):  # 最多尝试加载 15 次# 向下滚动page.scroll.down(1500)time.sleep(2.5)try:author_elements = page.eles('@id=author-text')content_elements = page.eles('@id=content-text')for author_elem, content_elem in zip(author_elements, content_elements):# print(item)items.append((url, author_elem.text.strip(), content_elem.text.strip()))except Exception as e:logging.debug(f"解析单条评论失败: {e}")continuelogging.info(f"从 {url} 采集到 {len(items)} 条有效评论")# 批量插入数据库(避免重复)if items:insert_sql = """INSERT INTO commentes (video_url, author, comment) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE created_at = CURRENT_TIMESTAMP"""cursor.executemany(insert_sql, items)logging.info(f"✅ 成功插入 {len(items)} 条评论")except Exception as e:logging.error(f"处理视频失败 {url}: {e}")connection.rollback()# 视频间延迟,避免过于频繁time.sleep(2)# 关闭资源
cursor.close()
connection.close()
page.quit()
logging.info("任务完成,资源已释放")
http://www.dtcms.com/a/495206.html

相关文章:

  • mac idea 点击打开项目卡死
  • 网站建设座谈会上的发言wordpress显示文章点击量
  • 室内设计效果图网站推荐在线玩网页游戏h5网站大全
  • C# 仿QQ聊天功能实现 (SQL Server数据库)
  • TensorFlow深度学习实战——节点分类
  • scipy的统计学库(4):用rv_histogram类实现随机抽样
  • Element Plus el-table 默认勾选行的方法
  • Linux系统函数opendir、closedir、readdir详解及案例(自定义ls工具)
  • 便捷网站建设哪家便宜网站建没有前景
  • 接口测试 | Postman的高级用法的测试使用
  • TR3--Transformer之pytorch复现
  • Traccar本地文件包含漏洞(CVE-2025-61666)
  • 建站网站推荐icp域名备案查询系统
  • 智能美颜引擎:美颜SDK如何实现自适应芯片性能优化
  • Java中的boolean与Boolean
  • Flutter高级进阶教程(视频教程)
  • Rocketmq 分布式事务 两阶段提交
  • 骑行,团骑和独骑冲突吗?
  • 对网站和网页的认识鞍山信息网便民信息
  • 《算法通关指南---C++编程篇(2)》
  • 【论文速递】2025年第29周(Jul-13-19)(Robotics/Embodied AI/LLM)
  • 网站 模板更改网站备案
  • VR反诈一体机-VR预防诈骗模拟系统-VR防诈骗体验馆方案
  • 大型网站seo课程沈阳关键词优化费用
  • Kubernetes PVC 扩容完全指南:静态迁移 vs 动态扩容
  • 【题解】B2613【深基1.习5】打字速度
  • Elastic DevRel 通讯 — 2025 年 10 月
  • Java面试基础题
  • 博客标题:快速解决 VS Code 终端运行 petalinux-config 界面显示错乱问题
  • 强化学习【Monte Carlo Learning][MC Basic 算法]