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

如何完整提取动态渲染网页中的结构化数据:绕过不完整HTML抓取的解决方案

阿宇君_1578

阿宇君_1578

发布时间:2026-03-11 14:03:35

|

1000人浏览过

|

来源于php中文网

原创

如何完整提取动态渲染网页中的结构化数据:绕过不完整HTML抓取的解决方案

本文介绍当Selenium无法获取完整HTML时,如何通过解析页面内嵌的JSON数据(如Next.js的__NEXT_DATA__)高效、准确地提取动态渲染网站的全部结构化信息,避免因JavaScript延迟加载导致的数据丢失。

本文介绍当selenium无法获取完整html时,如何通过解析页面内嵌的json数据(如next.js的`__next_data__`)高效、准确地提取动态渲染网站的全部结构化信息,避免因javascript延迟加载导致的数据丢失。

在Web爬虫实践中,一个常见却易被忽视的陷阱是:看似“成功加载”的页面,其HTML源码可能并不包含你所见的全部内容。尤其在使用React、Next.js等现代前端框架构建的网站(如 kununu.com)中,关键数据往往并非直接写入DOM,而是以序列化JSON形式嵌入 <script id="__NEXT_DATA__"> 标签中,再由客户端JavaScript动态渲染。此时,即使Selenium已等待元素可见、甚至模拟了“展开更多评论”等交互,driver.execute_script("return document.documentElement.innerHTML") 返回的仍是渲染中途或未完全挂载的DOM快照——导致你观察到的“HTML缺失”(如评分星级、子维度ID等字段凭空消失)。

根本解法不是更激进地等待或滚动,而是跳过DOM渲染层,直取原始数据源。以 kununu 为例,其真实评论与评分数据全部预置在页面初始HTML的 <script id="__NEXT_DATA__"> 中:

import json
import requests
from bs4 import BeautifulSoup

url = "https://www.kununu.com/de/adidas/kommentare"
response = requests.get(url)
response.raise_for_status()  # 确保请求成功

soup = BeautifulSoup(response.content, "html.parser")
# 定位并提取 Next.js 的初始化数据脚本
script_tag = soup.select_one("#__NEXT_DATA__")
if not script_tag:
    raise ValueError("无法找到 __NEXT_DATA__ 脚本标签,请检查页面结构是否变更")

data = json.loads(script_tag.string)

# 数据路径示例(依Next.js服务端渲染结构而定)
reviews = data["props"]["initialReduxState"]["reviews"]["reviews"]

for review in reviews[:3]:  # 仅展示前3条
    print(f"标题: {review['title']}")
    print(f"总分: {review['score']}")
    for rating in review.get("ratings", []):
        print(f"  - {rating['id']}: {rating['score']} 分 | {rating['text']}")
    print("-" * 50)

✅ 优势显著:

  • 完整性:100%覆盖服务端注入的原始数据,无渲染时序问题;
  • 高性能:单次HTTP请求 + 本地JSON解析,远快于启动浏览器+等待JS执行;
  • 稳定性:不依赖CSS选择器或DOM结构变动(__NEXT_DATA__ 是Next.js标准锚点,变更频率极低)。

⚠️ 注意事项:

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

  • 并非所有网站都使用Next.js;需先检查源码是否存在 id="__NEXT_DATA__" 或类似命名的 <script> 标签(如Gatsby的 window.___gatsby、Vue SSR的 window.__INITIAL_STATE__);
  • 若目标网站采用纯客户端渲染(CSR)且无服务端数据注入,则仍需Selenium配合显式等待(WebDriverWait + presence_of_element_located),但应优先尝试网络面板(Network Tab)中XHR/Fetch请求,直接调用API;
  • 使用 requests 时注意处理反爬:添加 User-Agent、管理会话Cookie、必要时集成代理或验证码服务。

总结而言,面对“HTML提取不全”的难题,工程师的第一反应不应是优化等待逻辑,而应打开浏览器开发者工具的 Elements 面板搜索 __NEXT_DATA__ 或 Network 面板筛选 XHR 请求——真正的数据,往往藏在最安静的地方。

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

WorkBuddy

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

豆包大模型

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

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

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

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

咔片AIPPT

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

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

5755

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

3272

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2930

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2959

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

4779

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2901

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2709

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2408

2023.09.01

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

40

2026.10.08

热门下载

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

精品课程

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

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