如何抓取带「加载更多」按钮的网站全部评论数据?(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格式)
| 评分星级 | 治疗类型 | 价格 |
|---|---|---|
| 5 | Dentist Consultation | ₺15735 |
| 4 | Dental Implants | ₺18512 |
| 5 | Veneers | ₺9256 |
| ... | ... | ... |
内容的提问来源于stack exchange,提问作者armagan aydin
相关产品推荐
相关产品推荐

