吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 340|回复: 9
上一主题 下一主题
收起左侧

[学习记录] selenium实时获取抖音直播评论Python

  [复制链接]
跳转到指定楼层
楼主
jin2025 发表于 2025-3-25 17:24 回帖奖励
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import time
import threading
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
 
live_dy_url = 'https://live.douyin.com/670238762772'  # 直播间链接
crawling_browser_dy = None  # 浏览器
comment_list = []  # 评论列表
previous_comment_count = 0  # 上一次评论的数量
 
 
# 打开直播间浏览器
def init_crawling_browser_dy(url):
    global crawling_browser_dy
    service = Service(r'D:\Python\Python3.10.7\chromedriver.exe')
    options = webdriver.ChromeOptions()
    # 无头模式options.add_argument('--headless')
 
    options.add_experimental_option('detach', True)
    options.add_argument('--ignore-certificate-errors')
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    crawling_browser_dy = webdriver.Chrome(options=options, service=service)
    crawling_browser_dy.get('https://live.douyin.com/'# 抖音直播主页
    crawling_browser_dy.maximize_window()  # 浏览器全屏
    time.sleep(2# 等待2s
    crawling_browser_dy.get(url)  # 跳转到直播间链接
    threading.Thread(target=poll_comments).start()
 
 
# 轮询获取评论
def poll_comments():
    global crawling_browser_dy, previous_comment_count
    while True:
        try:
            content_dy = crawling_browser_dy.page_source
            soup_dy = BeautifulSoup(content_dy, 'html.parser')
 
            # 找到所有的评论项
            comment_items = soup_dy.find_all('div', class_='TNg5meqw')
 
            # 检查是否有新的评论
            if len(comment_items) > previous_comment_count:
                # 获取最新的5条评论项
                latest_comment_items = comment_items[-5:]
 
                for comment_item in latest_comment_items:
                    # 获取用户名
                    username_span = comment_item.find('span', class_='u2QdU6ht')
                    username = username_span.text if username_span else '未知用户'
 
                    # 获取评论内容
                    comment_span = comment_item.find('span', class_='webcast-chatroom___content-with-emoji-text')
                    if comment_span:
                        comment_text = comment_span.text
                        # 输出用户名和评论内容
                        print(f"用户:{username}----- 评论:{comment_text}")
                    else:
                        comment_text = '无评论'
 
                # 更新上一次评论的数量
                previous_comment_count = len(comment_items)
 
            time.sleep(1# 轮询间隔时间,单位为秒
        except Exception as e:
            print(f'抖音自动化测试浏览器:发生异常 - {e}')
 
init_crawling_browser_dy(live_dy_url)


学习中!大佬勿喷

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
sam喵喵 发表于 2025-3-25 20:34
感谢分享,一定要是直播间吗,能不能获取短视频下面的评论
3#
BTCQAQ 发表于 2025-3-25 22:00
import time
import threading
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

live_dy_url = 'https://live.douyin.com/670238762772'  # 直播间链接
crawling_browser_dy = None  # 浏览器实例
previous_comment_count = 0  # 上一次评论的数量
lock = threading.Lock()  # 线程锁

def init_crawling_browser_dy(url):
    global crawling_browser_dy
    try:
        service = Service(r'D:\Python\Python3.10.7\chromedriver.exe')
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')  # 启用无头模式
        options.add_argument('--disable-gpu')
        options.add_argument('--no-sandbox')
        options.add_argument('--ignore-certificate-errors')
        options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
        options.add_experimental_option('useAutomationExtension', False)
        
        # 设置User-Agent以模拟真实浏览器
        options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                             'AppleWebKit/537.36 (KHTML, like Gecko) '
                             'Chrome/115.0.0.0 Safari/537.36')
        
        crawling_browser_dy = webdriver.Chrome(options=options, service=service)
        crawling_browser_dy.set_window_size(1920, 1080)
        crawling_browser_dy.get('https://live.douyin.com/')  # 抖音直播主页
        
        # 使用显式等待,确保页面加载完成
        WebDriverWait(crawling_browser_dy, 10).until(
            EC.presence_of_element_located((By.TAG_NAME, 'body'))
        )
        
        logging.info('已打开抖音直播主页')
        time.sleep(2)  # 等待2秒,确保页面完全加载
        
        crawling_browser_dy.get(url)  # 跳转到指定的直播间链接
        logging.info(f'已跳转到直播间: {url}')
        
        # 启动评论轮询线程
        comment_thread = threading.Thread(target=poll_comments, daemon=True)
        comment_thread.start()
    except Exception as e:
        logging.error(f'初始化浏览器时发生异常: {e}')
        if crawling_browser_dy:
            crawling_browser_dy.quit()

def poll_comments():
    global crawling_browser_dy, previous_comment_count
    while True:
        try:
            # 使用显式等待确保评论区域已加载
            WebDriverWait(crawling_browser_dy, 10).until(
                EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div[class*="comment"]'))
            )
            
            content_dy = crawling_browser_dy.page_source
            soup_dy = BeautifulSoup(content_dy, 'html.parser')

            # 更稳健的选择器,避免依赖动态类名
            comment_container = soup_dy.find('div', {'class': lambda x: x and 'comment' in x})
            if not comment_container:
                logging.warning('未找到评论容器')
                time.sleep(2)
                continue
            
            comment_items = comment_container.find_all('div', class_=lambda x: x and 'comment-item' in x)

            with lock:
                current_count = len(comment_items)
                if current_count > previous_comment_count:
                    new_comments = comment_items[previous_comment_count:current_count]
                    for comment in new_comments:
                        username = comment.find('span', class_=lambda x: x and 'username' in x)
                        username = username.text.strip() if username else '未知用户'

                        comment_text = comment.find('span', class_=lambda x: x and 'comment-text' in x)
                        comment_text = comment_text.text.strip() if comment_text else '无评论'

                        logging.info(f"用户:{username} ----- 评论:{comment_text}")

                    previous_comment_count = current_count

            time.sleep(2)  # 调整轮询间隔时间
        except Exception as e:
            logging.error(f'评论抓取时发生异常: {e}')
            time.sleep(5)  # 异常后等待更长时间再重试

if __name__ == "__main__":
    init_crawling_browser_dy(live_dy_url)
   
    try:
        while True:
            time.sleep(1)  # 保持主线程运行
    except KeyboardInterrupt:
        logging.info('程序终止,关闭浏览器')
        if crawling_browser_dy:
            crawling_browser_dy.quit()



稍微优化了一下,请各位大佬多多指点迷津
4#
tianjile666 发表于 2025-3-25 22:13
直播间的评论成品比较多,搞视频下的评论比较少
5#
Semoon 发表于 2025-3-25 22:49
代码已经挂了
6#
bobo2017365 发表于 2025-3-25 23:29
不错啊,看起来有点儿东西
7#
Abbbbb 发表于 2025-3-26 08:59
大佬nb啊!
8#
 楼主| jin2025 发表于 2025-3-27 15:59 |楼主

没配置浏览器驱动吧
9#
 楼主| jin2025 发表于 2025-3-27 16:00 |楼主
sam喵喵 发表于 2025-3-25 20:34
感谢分享,一定要是直播间吗,能不能获取短视频下面的评论

这是web端直播间的
10#
lshi 发表于 2025-3-29 00:56
拿走咯哈哈哈哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-30 20:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表