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

如何爬取Debank动态加载的帖子评论?

爬取Debank帖子全部评论的解决方案

针对Debank虚拟滚动(滚动时旧评论DOM被移除)导致只能获取少量评论的问题,最可靠的方案是直接抓取后端评论API,或通过浏览器DevTools监听网络请求获取完整数据,以下是具体实现:

方法一:直接调用评论API(推荐)

Debank的评论数据通过后端接口异步加载,绕过页面DOM的限制,直接请求接口就能批量获取所有评论。

步骤:

  1. 抓包定位评论API:
    打开目标帖子页面(如https://debank.com/stream/2057406),按F12打开开发者工具,切换到「Network」标签并筛选「XHR/Fetch」请求。滚动页面加载新评论,找到返回评论列表的接口(通常URL包含stream/{帖子ID}/comments),记录请求参数(如cursor分页游标、limit每页条数)和返回结构(评论数据、下一页游标next_cursor)。

  2. 编写请求代码:
    模拟浏览器请求头(需包含登录后的Cookie,若评论需权限查看),循环请求接口直到无新评论返回:

import requests
import json
import time

# 替换为你的浏览器请求头和登录Cookie
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Referer': 'https://debank.com/stream/2057406',
    'Cookie': 'your_login_cookie_here'  # 从浏览器复制登录后的Cookie字符串
}

stream_id = 2057406
all_comments = []
cursor = None
limit = 20  # 每页评论数,根据实际接口调整

while True:
    params = {'limit': limit}
    if cursor:
        params['cursor'] = cursor
    
    api_url = f'https://api.debank.com/stream/{stream_id}/comments'
    try:
        resp = requests.get(api_url, headers=headers, params=params)
        resp.raise_for_status()
        data = resp.json()
    except Exception as e:
        print(f"请求失败: {e}")
        break
    
    current_comments = data.get('comments', [])
    if not current_comments:
        break
    
    all_comments.extend(current_comments)
    cursor = data.get('next_cursor')
    
    if not cursor:
        break
    
    time.sleep(1)  # 加延迟避免触发限流

# 保存评论到本地文件
with open('debank_comments.json', 'w', encoding='utf-8') as f:
    json.dump(all_comments, f, ensure_ascii=False, indent=2)

print(f"共获取{len(all_comments)}条评论")

方法二:用Selenium监听网络请求

如果API存在签名验证无法直接调用,可以用Selenium配合Chrome DevTools监听所有评论接口的响应,捕获完整数据:

from selenium import webdriver
import json
import time

driver = webdriver.Chrome()
# 启用网络监听
driver.execute_cdp_cmd('Network.enable', {})

all_comments = []

# 监听评论接口的响应事件
def capture_comment_response(event):
    url = event['response']['url']
    if f'/stream/2057406/comments' in url:
        resp_body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': event['requestId']})
        data = json.loads(resp_body['body'])
        all_comments.extend(data.get('comments', []))

driver.add_event_listener('Network.responseReceived', capture_comment_response)

# 打开目标页面
driver.get('https://debank.com/stream/2057406')
time.sleep(2)  # 等待页面初始加载

# 模拟滚动加载所有评论
last_scroll_height = driver.execute_script('return document.body.scrollHeight')
while True:
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
    time.sleep(2)  # 等待新评论加载
    new_scroll_height = driver.execute_script('return document.body.scrollHeight')
    
    if new_scroll_height == last_scroll_height:
        break
    last_scroll_height = new_scroll_height

driver.quit()

# 保存结果
with open('debank_comments_selenium.json', 'w', encoding='utf-8') as f:
    json.dump(all_comments, f, ensure_ascii=False, indent=2)

print(f"共获取{len(all_comments)}条评论")

关键注意事项

  • Cookie权限:部分帖子的评论需要登录才能查看,需从浏览器复制登录后的Cookie到请求头中。
  • 限流处理:添加合理的请求延迟,避免触发Debank的反爬机制导致IP被封禁。
  • 接口更新:Debank的API可能会迭代,若代码失效需重新抓包确认最新接口参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:23:18