讲师中心 微信公众号
AI工具推荐 视频效率加速

如何绕过前端滚动直接抓取 Vivli 研究数据库的全部结构化数据

雨敏姑娘_1815

雨敏姑娘_1815

发布时间:2026-07-22 16:42:22

|

403人浏览过

|

来源于php中文网

原创

如何绕过前端滚动直接抓取 Vivli 研究数据库的全部结构化数据

本文揭示了 vivli 搜索平台(search.vivli.org)数据实际由 azure search 后端 api 动态提供,无需模拟滚动或 selenium 驱动浏览器;通过分析网络请求,可直接调用其 restful 接口批量获取全部研究记录(7000+ 条),高效、稳定、零渲染开销。

本文揭示了 vivli 搜索平台(search.vivli.org)数据实际由 azure search 后端 api 动态提供,无需模拟滚动或 selenium 驱动浏览器;通过分析网络请求,可直接调用其 restful 接口批量获取全部研究记录(7000+ 条),高效、稳定、零渲染开销。

Vivli 平台表面呈现为一个需点击搜索按钮、再不断滚动加载的单页应用(SPA),这让许多开发者误入“模拟滚动→等待加载→提取 DOM”的传统 Selenium/Rselenium 路径。但真实情况是:所有研究元数据均来自后端 Azure Search 服务的 XHR 接口,而非前端 JavaScript 渲染生成。这意味着——只要定位到该 API,并构造合法请求,即可跳过整个浏览器自动化流程,实现秒级、全量、可复现的数据获取。

✅ 推荐方案:直连 Azure Search API(Python)

以下 Python 脚本通过 requests 直接调用 Vivli 的搜索索引接口,采用分页参数 &$skip= 和 &$top=1000 实现批量拉取(共约 7,000+ 条记录),并使用 pandas.json_normalize() 自动展平嵌套 JSON 响应:

import requests
import pandas as pd
from pandas import json_normalize

# 配置请求头(避免被拒绝)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 初始化会话(自动携带 headers)
s = requests.Session()
s.headers.update(headers)

# 存储全部结果
big_df = pd.DataFrame()

# 分页拉取:每页 1000 条,从 skip=0 到 skip=7000(覆盖全部)
for skip in range(0, 8000, 1000):
    url = (
        "https://vivli-prod-cus-srch.search.windows.net/indexes/studies/docs?"
        "api-key=C8237BFE70B9CC48489DC7DD84D88379&"
        "api-version=2016-09-01&"
        f"$top=1000&$skip={skip}&"
        "search=*&"
        "$filter=assignedAppType%20eq%20%27Default%27&"
        "$count=true&"
        "facet=studyDesign&"
        "facet=locationsOfStudySites,count:300,sort:value&"
        "facet=sponsorType&"
        "facet=contributorType&"
        "facet=sponsorName,count:500,sort:value&"
        "facet=studyType&"
        "facet=actualEnrollment,interval:100"
    )

    try:
        r = s.get(url, timeout=15)
        r.raise_for_status()
        data = r.json()
        df_page = json_normalize(data['value'])
        big_df = pd.concat([big_df, df_page], ignore_index=True)
        print(f"✅ 已获取 {len(df_page)} 条记录(skip={skip})")
    except Exception as e:
        print(f"⚠️ 请求失败 (skip={skip}): {e}")
        break

print(f"\n? 总计获取 {len(big_df)} 条研究记录")
print(big_df[['title', 'sponsorName', 'nctId', 'studyType', 'actualEnrollment']].head())

? 关键说明:

PigX UI 前端开发
PigX UI 前端开发

PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。

下载
  • api-key 和 api-version 是公开可用的(Vivli 官方未设访问密钥鉴权);
  • 所有查询参数(如 $filter, facet)均可按需调整,例如限定 studyType eq 'Interventional';
  • search=* 表示全文匹配所有文档,等价于“无筛选”搜索。

⚠️ 为什么不推荐滚动模拟?

  • remDr$executeScript("window.scrollTo(...)") 类方法在 Vivli 中无效,因为滚动本身不触发新请求——内容加载由搜索按钮点击后的独立 XHR 控制;
  • sendKeysToElement(key="down") 无法触发任何逻辑,目标元素非可聚焦/可交互区域;
  • Selenium 方案耗时长(启动浏览器、渲染 JS、隐式等待)、易受网络波动和页面结构更新影响,且难以规模化。

? 进阶建议

  • R 语言用户:可用 httr2 + jsonlite::fromJSON() 替代 requests + pandas,逻辑完全一致;
  • 增量更新:添加 &$filter=lastUpdatedDate ge '2024-01-01' 获取近期变更;
  • 字段精简:若只需标题、NCT号、赞助方,可在 URL 中添加 $select=title,nctId,sponsorName 提升响应速度;
  • 合规性提醒:请遵守 Vivli 数据使用政策,用于学术/非商业目的时建议注明来源。

该方案将数据获取从“黑盒浏览器操作”升级为“白盒 API 对话”,兼顾效率、稳定性与可维护性——这才是现代网页数据采集的正确打开方式。

立即学习“前端免费学习笔记(深入)”;

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2183

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4663

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

5790

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5238

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

743

2024.05.22

免费爬虫工具有哪些
免费爬虫工具有哪些

免费爬虫工具有Scrapy、Beautiful Soup、ParseHub、Octoparse、Webocton Scriptly、RoboBrowser和Goutte。更多关于免费爬虫工具的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4253

2023.11.10

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

653

2023.11.13

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

0

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

200

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP6.x API接口--十天技能课堂
ThinkPHP6.x API接口--十天技能课堂

共14课时 | 1.5万人学习

Django DRF 源码解析
Django DRF 源码解析

共21课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn