
本文讲解如何正确获取依赖 javascript 异步加载内容的网页数据——以随机股票代码生成器为例,揭示为何传统 requests + beautifulsoup 失效,并提供轻量、高效、无需浏览器渲染的纯 api 调用方案。
本文讲解如何正确获取依赖 javascript 异步加载内容的网页数据——以随机股票代码生成器为例,揭示为何传统 requests + beautifulsoup 失效,并提供轻量、高效、无需浏览器渲染的纯 api 调用方案。
当使用 requests + BeautifulSoup 抓取类似 https://www.php.cn/link/e84d3444422cda735543114cf5df6b95 这类页面时,你常会发现 HTML 中仅存在 <h1 id="ticker">Loading...</h1>,而非实际显示的随机股票代码(如 FVE 或 ZTS)。这是因为该网站并非在服务端渲染完整 HTML,而是通过前端 JavaScript 在页面加载后,异步请求一个 JSON 接口(/stocks.json),再从中随机选取并插入 DOM。
❌ 为什么传统静态解析失效?
- requests.get() 仅获取初始 HTML 响应,不执行 JavaScript;
- BeautifulSoup 是纯 HTML 解析器,无法等待或触发 JS 执行;
- “Loading…” 是占位符,真实数据由客户端 JS 后续填充。
✅ 正确做法:直击数据源头
通过浏览器开发者工具(Network → XHR/Fetch)可快速定位真实数据接口:
? https://www.php.cn/link/e84d3444422cda735543114cf5df6b95stocks.json
该接口返回一个纯文本 JSON 数组,例如:
["AAPL", "MSFT", "GOOGL", "TSLA", "FVE", "ZTS", "JNJ", "V"]
因此,无需启动 Selenium 或 Playwright 等重量级浏览器自动化工具,只需两行 Python 即可高效、稳定、低延迟地获取随机股票代码:
import random import requests # 直接请求原始数据源 url = "https://www.php.cn/link/e84d3444422cda735543114cf5df6b95stocks.json" symbols = requests.get(url).json() # 随机选取一个(模拟前端行为) random_ticker = random.choice(symbols) print(random_ticker) # 输出示例:'JNJ'
⚠️ 注意事项与最佳实践
- 稳定性优先:该 API 无认证、无频率限制(截至 2024 年),但建议添加异常处理与超时控制;
- 避免过度请求:虽为静态 JSON,仍建议设置 timeout=(3, 7) 并合理控制调用频次;
- 不依赖 UI 结构:绕过 HTML 解析,彻底规避 CSS 类名变更、DOM 重排等前端维护风险;
- 可扩展性强:若需批量获取多个随机代码,直接 random.choices(symbols, k=5) 即可。
✅ 总结
面对 JavaScript 渲染型网页,第一反应不应是“上浏览器自动化”,而应先检查网络请求——多数现代网站已将动态内容解耦为独立 API。本例中,/stocks.json 就是真正的数据契约(data contract)。掌握这一思路,不仅能解决股票随机器问题,更适用于大量新闻轮播、实时行情、评论列表等常见场景。简洁、可靠、高性能,才是生产环境 Web 抓取的黄金准则。
立即学习“Java免费学习笔记(深入)”;

















