如何用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
相关产品推荐
相关产品推荐

