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

使用Selenium爬取classic.clinicaltrials.gov表格数据失败,请求技术帮助

解决ClinicalTrials.gov临床试验数据爬取问题

原代码的核心问题

  • XPath语法错误:定位表格tbody时缺失table标签,正确路径应为//table[@id="theDataTable"]/tbody
  • 行元素定位逻辑错误:使用绝对路径会重复获取所有行,应改用相对路径.//tr基于tbody查找
  • 循环嵌套混乱:多余的[role="row"]查找,且直接对列表调用find_elements方法,导致无法正确读取单元格内容
  • 未处理页面加载延迟:页面元素未完全渲染就执行查找,大概率导致元素定位失败

修正后的完整代码(含Excel保存功能)

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
import pandas as pd

# 初始化Chrome浏览器
driver = webdriver.Chrome()
target_url = "https://classic.clinicaltrials.gov/ct2/results?cond=&term=&cntry=&state=&city=&dist="
driver.get(target_url)

# 等待表格加载完成(最长等待10秒)
wait = WebDriverWait(driver, 10)
table_body = wait.until(EC.presence_of_element_located((By.XPATH, '//table[@id="theDataTable"]/tbody')))

# 获取表格内所有数据行(相对路径避免重复获取)
rows = table_body.find_elements(By.XPATH, './/tr')

# 存储爬取数据的列表
clinical_data = []

for row in rows:
    # 跳过表头行
    if row.get_attribute('class') == 'headerRow':
        continue
    
    # 提取研究标题
    title_elem = row.find_element(By.XPATH, './/td[2]/a')
    study_title = title_elem.text
    
    # 提取病症(多病症用分号分隔)
    condition_cell = row.find_element(By.XPATH, './/td[3]')
    condition_list = condition_cell.find_elements(By.TAG_NAME, 'li')
    conditions = '; '.join([item.text for item in condition_list])
    
    # 提取干预措施(多措施用分号分隔)
    intervention_cell = row.find_element(By.XPATH, './/td[4]')
    intervention_list = intervention_cell.find_elements(By.TAG_NAME, 'li')
    interventions = '; '.join([item.text for item in intervention_list])
    
    # 将单条数据存入列表
    clinical_data.append({
        '研究标题': study_title,
        '病症': conditions,
        '干预措施': interventions
    })

# 关闭浏览器
driver.quit()

# 将数据保存到Excel文件
df = pd.DataFrame(clinical_data)
df.to_excel('临床试验数据汇总.xlsx', index=False, encoding='utf-8-sig')
print("数据已成功保存至'临床试验数据汇总.xlsx'")

关键优化点说明

  • 加入WebDriverWait等待机制,确保表格元素完全渲染后再进行查找
  • 修正XPath定位逻辑,精准定位目标单元格
  • 处理多值字段(病症、干预措施),用分号拼接成字符串方便Excel存储
  • 集成pandas库实现数据到Excel的批量保存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:52:25