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

使用Python提取ClinicalTrials.gov的NCT ID时find_all无结果如何解决

问题原因分析
  • 参数类型错误:你定义的url是单元素列表,但requests.get()要求传入的URL参数为字符串,直接传入列表会触发请求异常,无法拿到正确的页面返回内容,首先需要去掉url外侧的方括号,直接赋值为字符串即可。
  • 页面规则已更新:ClinicalTrials.gov近年完成了版本迭代,旧版的ct2/前缀路径已逐步废弃,当前公开搜索结果页的NCT详情链接规则已发生变更,你设置的ct2/show/NCT匹配规则完全不适用于现有页面结构。
  • 页面内容为动态渲染:当前平台的搜索结果列表是通过前端JS动态渲染生成的,直接发送GET请求拿到的静态HTML源码中不包含渲染后的NCT链接标签,find_all自然匹配不到任何结果。
  • 反爬机制拦截:未携带UA等合法请求头的请求会被平台反爬策略直接拦截,返回异常页面或者空内容,你可以先打印response.status_code确认请求状态是否为200,再打印soup.prettify()查看返回的页面内容是否符合预期。

修正参考代码示例

import requests
from bs4 import BeautifulSoup
import re

# 修正url为字符串
url = 'https://clinicaltrials.gov/ct2/results?cond=&term=atrial+fibrillation&cntry=&state=&city=&dist='
# 增加请求头模拟浏览器访问,规避基础反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
# 适配新版页面的NCT链接匹配规则
nct_links = soup.find_all("a", href=re.compile(r'/study/NCT\d+'))
nct_ids = [link['href'].split('/')[-1] for link in nct_links]
print(nct_ids)

注:如果运行后仍然匹配不到内容,说明当前页面动态渲染程度较高,建议换用Selenium、Playwright等模拟浏览器的工具,获取渲染后的完整页面内容后再做提取。

内容的提问来源于stack exchange,提问作者Giorgia Mancini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:05