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

新手求助:使用BeautifulSoup抓取WhatClinic网站span类评分数据

解决WhatClinic诊所评分与评论抓取问题(含翻页)

一、你的代码问题分析

  • results = soup.find_all("span", attrs={"class":"stars-rate"})返回的是BeautifulSoup结果列表,直接调用results.contents会报错,需要遍历列表中的每个元素来获取内容。
  • 仅用requests获取静态HTML可能拿不到评论数据——很多网站会通过JavaScript动态加载评论/分页内容,静态请求返回的页面里没有这部分数据。

二、修正后的静态抓取(针对评分)

如果评分是静态渲染的,修正代码如下:

!pip install beautifulsoup4 requests
import requests
from bs4 import BeautifulSoup

# 发起请求,添加请求头模拟浏览器,避免被反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
url = "https://www.whatclinic.com/dentists/turkey/mugla-province/yalikavak/dt-ufuk-kayhan"
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding  # 解决编码问题

soup = BeautifulSoup(r.text, "html.parser")

# 提取星级评分(遍历结果列表)
results = soup.find_all("span", attrs={"class": "stars-rate"})
for item in results:
    # 提取评分文本或属性值,比如有些网站会用data-rating存储数值
    rating_text = item.get_text(strip=True)
    rating_data = item.get("data-rating")  # 检查是否有这个属性
    print(f"星级评分文本:{rating_text},数据值:{rating_data}")

三、动态评论抓取与翻页实现

如果评论是JS动态加载的,需要用selenium模拟浏览器加载页面:

步骤1:安装依赖

pip install selenium webdriver-manager

步骤2:完整抓取代码(含翻页)

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import time

# 初始化浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.whatclinic.com/dentists/turkey/mugla-province/yalikavak/dt-ufuk-kayhan")
time.sleep(3)  # 等待页面加载完成

# 定义抓取函数
def scrape_comments():
    soup = BeautifulSoup(driver.page_source, "html.parser")
    # 抓取评论内容
    comments = soup.find_all("div", class_="review-item")
    for comment in comments:
        # 提取用户名
        username = comment.find("span", class_="reviewer-name").get_text(strip=True) if comment.find("span", class_="reviewer-name") else "匿名"
        # 提取评分
        rating = comment.find("span", class_="stars-rate").get("data-rating") if comment.find("span", class_="stars-rate") else "无评分"
        # 提取评论内容
        content = comment.find("p", class_="review-text").get_text(strip=True) if comment.find("p", class_="review-text") else "无内容"
        print(f"用户:{username}\n评分:{rating}星\n评论:{content}\n---")

# 第一次抓取
scrape_comments()

# 翻页逻辑(假设分页按钮是"Next"或类似文本)
while True:
    try:
        # 找到下一页按钮并点击
        next_btn = driver.find_element("xpath", "//a[contains(text(), 'Next')]")
        # 检查按钮是否可点击(避免重复点击)
        if next_btn.is_enabled() and next_btn.is_displayed():
            next_btn.click()
            time.sleep(2)  # 等待页面加载
            scrape_comments()
        else:
            break
    except:
        # 没有下一页时退出循环
        break

# 关闭浏览器
driver.quit()

四、注意事项

  • 反爬应对:添加请求头、控制请求间隔,避免频繁访问被封IP。
  • 元素定位:如果网站更新了类名或结构,需要用浏览器开发者工具(F12)重新检查元素的选择器。
  • 数据存储:可以把抓取到的评论存入CSV或JSON文件,方便后续分析。

内容的提问来源于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 09:30:49