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

如何抓取Capterra平台带“加载更多”按钮的商家全量评论?

解决Capterra评论抓取问题的方案

一、Python + Playwright 实现步骤

  • 安装依赖:pip install playwright,执行playwright install安装浏览器驱动
  • 核心逻辑:模拟真实浏览器加载页面,等待动态渲染的评论加载完成,处理分页获取全部评论
  • 示例代码:
from playwright.sync_api import sync_playwright

def scrape_capterra_reviews(url):
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # 调试时可设为False查看浏览器操作
        page = browser.new_page()
        page.goto(url, wait_until="networkidle")
        
        # 循环加载更多评论
        while True:
            try:
                load_more_btn = page.locator('button:has-text("Load More")')
                if load_more_btn.is_visible():
                    load_more_btn.click()
                    page.wait_for_timeout(2000)  # 等待加载,可根据网络调整时长
                else:
                    break
            except Exception:
                break
        
        # 提取评论信息
        reviews = page.locator('.review-card').all()
        result = []
        for review in reviews:
            author = review.locator('.review-author-name').text_content()
            rating = review.locator('.star-rating').get_attribute('aria-label')
            content = review.locator('.review-content').text_content()
            result.append({
                'author': author.strip(),
                'rating': rating.strip(),
                'content': content.strip()
            })
        
        browser.close()
        return result

# 调用示例
hubspot_reviews = scrape_capterra_reviews("https://www.capterra.com/p/152373/HubSpot-CRM/reviews/")
for idx, rev in enumerate(hubspot_reviews, 1):
    print(f"评论{idx}:")
    print(f"作者: {rev['author']}")
    print(f"评分: {rev['rating']}")
    print(f"内容: {rev['content']}\n")
  • 注意:页面元素选择器可能随平台更新变化,需用浏览器开发者工具重新定位;设置合理等待时间,避免触发反爬机制

二、JavaScript + Puppeteer 实现步骤

  • 安装依赖:npm install puppeteer
  • 核心逻辑:和Playwright一致,模拟浏览器操作渲染动态内容,处理分页获取全部评论
  • 示例代码:
const puppeteer = require('puppeteer');

async function scrapeCapterraReviews(url) {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: 'networkidle2' });

    // 加载所有评论
    while (true) {
        try {
            const loadMoreBtn = await page.$('button:has-text("Load More")');
            if (loadMoreBtn) {
                await loadMoreBtn.click();
                await page.waitForTimeout(2000);
            } else {
                break;
            }
        } catch (err) {
            break;
        }
    }

    // 提取评论数据
    const reviews = await page.evaluate(() => {
        const reviewCards = document.querySelectorAll('.review-card');
        return Array.from(reviewCards).map(card => {
            const author = card.querySelector('.review-author-name').textContent.trim();
            const rating = card.querySelector('.star-rating').getAttribute('aria-label').trim();
            const content = card.querySelector('.review-content').textContent.trim();
            return { author, rating, content };
        });
    });

    await browser.close();
    return reviews;
}

// 调用示例
scrapeCapterraReviews("https://www.capterra.com/p/152373/HubSpot-CRM/reviews/")
    .then(reviews => {
        reviews.forEach((rev, idx) => {
            console.log(`评论${idx+1}:`);
            console.log(`作者: ${rev.author}`);
            console.log(`评分: ${rev.rating}`);
            console.log(`内容: ${rev.content}\n`);
        });
    })
    .catch(err => console.error(err));

三、bs4无效的原因及修正方向

  • 无效原因:Capterra评论是动态渲染的,初始HTML不包含评论内容,bs4仅能抓取静态HTML,因此无法获取数据
  • 修正思路:若不想用浏览器自动化,可尝试抓包找真实API接口:
    1. 打开浏览器开发者工具的Network面板,刷新页面
    2. 过滤XHR/Fetch请求,查找含review/comment等关键词的接口
    3. 分析请求头参数(如Authorization),模拟发送请求获取数据
  • 注意:平台API可能存在反爬机制,需严格模拟浏览器请求头,且接口可能随时更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:22:04