如何高效抓取 React 构建的赛事名单页面(含嵌套表格结构)中的参赛数据

陌雪君_5512

陌雪君_5512

2026-07-05

467人浏览

原创

如何高效抓取 React 构建的赛事名单页面(含嵌套表格结构)中的参赛数据

本文介绍如何绕过 selenium 渲染难题,直接调用后端 rest api 获取 gavlepistol 赛事名单中各 squad、participant 等结构化数据,避免因 react 动态加载导致的元素定位失败问题。

本文介绍如何绕过 selenium 渲染难题,直接调用后端 rest api 获取 gavlepistol 赛事名单中各 squad、participant 等结构化数据,避免因 react 动态加载导致的元素定位失败问题。

在爬取基于 React 构建的现代 Web 应用(如 https://www.php.cn/link/71585b1edc15fa6b66d97a747392bc43)时,常见误区是依赖 Selenium 等浏览器自动化工具“等待并查找 DOM 元素”。但该页面实际采用客户端渲染(CSR),关键内容(如 .rv-squad、.rv-participant)由 JavaScript 异步拉取 JSON 数据后动态注入;即使使用 time.sleep(5) 或显式等待,若未触发对应 API 请求或未完成状态更新,find_elements(By.CLASS_NAME, ...) 仍会返回空列表——正如提问中所见:driver.find_elements(By.CLASS_NAME, 'div.rv-squad-header.full') 语法本身错误(By.CLASS_NAME 不支持 CSS 选择器),且目标元素在初始 HTML 中根本不存在。

更优解:直连后端 API,获取原始结构化数据
经分析,该站点存在公开、未鉴权的 REST 接口(如 https://dev.bitnux.com/anmalan/competition/{id}),数据格式规范、字段清晰,远比解析渲染后的 DOM 可靠高效。以下是推荐实现:

import requests

# Step 1: 获取赛事基本信息及所有赛程事件
competition_url = "https://dev.bitnux.com/anmalan/competition/653"
competition_data = requests.get(competition_url).json()

print("赛事名称:", competition_data["name"])
print("-" * 80)

# Step 2: 遍历每个赛程(event),获取对应 squad 名单
squad_template = "https://dev.bitnux.com/anmalan/schedules/{schedule_id}/squad"

for event in competition_data["events"]:
    schedule_id = event["schedule"]
    try:
        squad_response = requests.get(squad_template.format(schedule_id=schedule_id))
        squad_response.raise_for_status()
        squad_data = squad_response.json()

        for squad in squad_data:
            if not squad["entries"]:  # 跳过无参赛者的分组
                continue
            print(f"\n【发枪时间】{squad['time']}")
            print(f"{'姓名':<p>✅ <strong>优势总结</strong>:  </p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6764" title="react design"><img
														src="https://img.php.cn/upload/skill/000/000/081/179110634625220.jpg" alt="react design" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/skill6764" title="react design" class="overflowclass">react design</a>
													<p class="overflowclass">将 Learn Social Studies 品牌系统应用于 React 界面,采用 CSS 变量、可复用组件规范,默认浅色主题并支持深色主题。</p>
												</div>
												<a rel="nofollow" href="/xiazai/skill6764" title="react design" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div>
  • 稳定性高:不依赖前端渲染逻辑、JavaScript 执行状态或 DOM 结构变更;
  • 性能优异:省去浏览器启动、页面加载、JS 执行等开销,响应更快;
  • 数据纯净:直接获取 JSON 原始字段(如 name, organization, division),无需复杂 CSS/XPath 提取与清洗;
  • 易扩展:可轻松批量处理多个 competition_id,支持分页、条件过滤等高级操作。

⚠️ 注意事项:

  • 该 API 地址(dev.bitnux.com)属开发环境,生产环境可能迁移或增加鉴权,请通过浏览器开发者工具(Network → XHR/Fetch)实时验证接口路径与响应格式;
  • 添加异常处理(如 requests.exceptions.RequestException)确保网络波动时程序健壮;
  • 若需长期稳定使用,建议联系网站方确认 API 使用政策,避免违反 robots.txt 或服务条款。

通过转向 API 优先策略,你不仅能解决当前 Selenium 抓取失败的问题,更能建立更可靠、可维护的数据采集流程。

相关专题

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

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

2023.11.10

4613

9

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

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

2023.11.13

673

12

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

2026.10.10

0

15

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

2026.10.10

0

26

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

2026.10.10

0

32

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

2026.10.10

0

16

Kratos框架零基础入门教程
Kratos框架零基础入门教程

本专题整理Kratos框架入门内容,涵盖Go环境准备、kratos CLI安装升级、new命令创建项目、目录结构分层说明、服务启动与双协议端口、依赖下载报错排查,帮助开发者快速跑通第一个Kratos框架微服务应用。

2026.10.10

0

15

C++条件判断语句怎么写
C++条件判断语句怎么写

C++条件判断是控制程序执行流程的重要基础。本专题介绍if、if-else、else if和switch等常见分支语句,结合条件表达式、比较运算符与代码示例,帮助初学者掌握不同场景下的判断逻辑。

2026.10.10

0

13

C++变量怎么声明和赋值
C++变量怎么声明和赋值

C++变量是编写程序和存储数据的基础。本专题围绕变量声明、定义、初始化、赋值和类型选择等内容展开,帮助初学者理解不同变量的用法,并掌握在实际代码中定义和使用变量的方法。

2026.10.10

0

20

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.1万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习