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

如何抓取带「加载更多」按钮的网站全部评论数据?(BeautifulSoup场景)

解决WhatClinic动态加载评论的抓取方案

目标网站的评论是动态加载的,点击「查看更多评论」按钮通过JavaScript渲染新内容,不会改变URL,所以单纯用requests+BeautifulSoup只能拿到初始加载的12条评论。以下是适配Google Colab的完整解决方案,用Selenium模拟浏览器点击,抓取全部133条评论并整理成DataFrame:

步骤1:在Colab中配置Selenium环境

先安装依赖并配置Chrome驱动:

!pip install selenium
!apt-get update
!apt install chromium-chromedriver

步骤2:完整抓取代码

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
from bs4 import BeautifulSoup
import pandas as pd
import time

# 配置Chrome选项适配Colab
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')  # 无头模式,不显示浏览器窗口
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# 初始化浏览器
driver = webdriver.Chrome('chromedriver', options=chrome_options)
url = "https://www.whatclinic.com/dentists/turkey/mugla-province/yalikavak/dt-ufuk-kayhan"
driver.get(url)

# 循环点击「查看更多评论」按钮,直到按钮消失
while True:
    try:
        # 等待按钮加载完成并点击
        load_more_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, '//button[contains(text(), "View more reviews")]'))
        )
        load_more_btn.click()
        time.sleep(2)  # 等待新评论加载,可根据网络情况调整
    except:
        # 按钮不存在时退出循环
        break

# 获取加载完成后的页面源码
soup = BeautifulSoup(driver.page_source, 'lxml')
driver.quit()  # 关闭浏览器

# 按评论块提取数据,确保评分、治疗、价格对应关系正确
review_blocks = soup.find_all("div", class_="review-item")
data = []
for block in review_blocks:
    # 提取当前评论的评分
    rating_elem = block.find("span", attrs={"property": "ratingValue"})
    rating = rating_elem.get_text(strip=True) if rating_elem else None
    
    # 提取当前评论下的所有治疗类型和对应价格
    treatment_list = block.find_all("span", class_="name")
    price_list = block.find_all("span", class_="price")
    
    for treat, price in zip(treatment_list, price_list):
        data.append({
            "评分星级": rating,
            "治疗类型": treat.get_text(strip=True) if treat else None,
            "价格": price.get_text(strip=True) if price else None
        })

# 整理成DataFrame
df = pd.DataFrame(data)
print(df.head())

代码说明

  • Selenium配置:适配Colab的无头Chrome模式,避免显示浏览器窗口;
  • 循环点击逻辑:通过WebDriverWait等待按钮可点击,点击后等待加载,直到按钮消失(无更多评论可加载);
  • 数据提取逻辑:按评论块分组提取,确保单条评论的评分与对应治疗、价格匹配,避免单纯遍历所有元素导致的对应混乱;
  • 空值处理:对缺失的评分、治疗或价格做了空值填充,方便后续数据分析。

预期输出示例(DataFrame格式)

评分星级治疗类型价格
5Dentist Consultation₺15735
4Dental Implants₺18512
5Veneers₺9256
.........

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:30:59