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

使用Selenium爬取医生列表时名称重复的原因及解决方法

问题分析与解决方案

你遇到的重复输出同一个医生姓名的问题,核心原因是循环中每次都定位到了同一个元素,常见场景是误用了find_element()(仅返回第一个匹配元素)而非find_elements()(返回所有匹配元素),或者在循环内重复定位单个元素而非遍历已获取的元素列表。

修正后的完整代码示例

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

# 初始化Chrome浏览器(需确保ChromeDriver已配置到环境变量)
driver = webdriver.Chrome()
# 替换为你的搜索结果页面URL
driver.get("https://www.doctoralia.com.mx/...")

try:
    # 等待医生列表元素加载完成(最多等待10秒)
    # 注意:请根据页面实际结构调整CSS选择器,以下为示例
    doctor_items = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".search-results .doctor-card__name"))
    )

    # 遍历所有医生元素,提取姓名
    doctor_names = [item.text.strip() for item in doctor_items if item.text.strip()]

    # 打印完整列表
    for num, name in enumerate(doctor_names, 1):
        print(f"{num}. {name}")

finally:
    # 关闭浏览器
    driver.quit()

关键修正点说明

  1. 使用find_elements()而非find_element():
    find_element()只会返回页面中第一个匹配的元素,循环21次就会重复输出第一个医生的姓名;而find_elements()会返回所有匹配的元素列表,遍历这个列表就能获取所有医生信息。

  2. 等待元素加载完成:
    网站是动态加载的,直接获取元素可能得到空列表,用WebDriverWait配合presence_of_all_elements_located确保所有医生元素加载完成后再提取。

  3. 调整元素定位器:
    请打开浏览器开发者工具(F12),检查医生姓名对应的HTML标签和class,替换代码中的CSS_SELECTOR值。比如实际页面中医生姓名可能在<h3 class="doctor-name">标签下,就把选择器改成.doctor-name。

注意事项

  • 避免频繁请求网站,防止触发反爬机制导致访问受限;
  • 如果页面有分页,需要额外处理分页逻辑;
  • 若提取的姓名为空,可检查定位器是否准确,或元素是否被隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:42:47