You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium和Python爬取TikTok视频的全部评论?

TikTok评论抓取解决方案

为什么你的方法失效?

  • BeautifulSoup无法获取评论:TikTok的评论是通过JavaScript动态渲染的,urllib.request.urlopen只能拿到页面初始的静态HTML,里面根本没有评论内容,所以用bs4肯定抓不到。
  • Selenium的问题:
    • find_elements_by_class_name不支持传入多个类名(你写的"tiktok-q9aj5z-PCommentText e1g2efjf6"是两个类),会直接报错或返回空。
    • 截图里的高亮类名是TikTok动态生成的(比如content-tiktok-1mf23fd-DivContentContainer里的随机串),每次页面刷新都会变化,用这种类名定位元素完全不可靠。
    • 只滚动一次不足以加载全部评论,TikTok评论是滚动触发加载的。

可行的Selenium实现方案

用稳定的属性选择器(比如data-e2e标记),配合循环滚动加载所有评论:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 初始化浏览器(根据你的Chrome版本配置driver路径)
options = webdriver.ChromeOptions()
options.add_argument("--start-maximized")
browser = webdriver.Chrome(options=options)
url = "https://www.tiktok.com/@adhdvision/video/7156974534078385413?is_from_webapp=v1&item_id=7156974534078385413"
browser.get(url)

# 循环滚动加载所有评论
last_comment_count = 0
while True:
    # 滚动到页面底部
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待评论加载
    time.sleep(3)
    # 获取当前评论数量
    current_comments = browser.find_elements(By.CSS_SELECTOR, 'p[data-e2e="comment-level-1"]')
    current_count = len(current_comments)
    # 如果评论数量不再增加,说明加载完成
    if current_count == last_comment_count:
        break
    last_comment_count = current_count

# 提取所有评论文本
comments = [comment.text for comment in current_comments]
for idx, comment in enumerate(comments, 1):
    print(f"评论{idx}: {comment}")

browser.quit()

关键优化(可选)

如果想更精准地等待元素加载,替代固定休眠时间,可以用WebDriverWait:

# 替换time.sleep(3)的代码
WebDriverWait(browser, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'p[data-e2e="comment-level-1"]'))
)

内容的提问来源于stack exchange,提问作者DaOP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:01:29