答案是使用能执行 javaScript 的工具或分析动态 接口。关键在于选择合适方法:优先逆向分析 XHR 请求,用 requests 直接调用 API;若需渲染,则用 Playwright 或 Selenium 模拟浏览器,获取动态内容。

python爬虫抓取 javascript 渲染页面的关键在于让程序能执行页面中的 js 代码,从而获取动态加载的内容。传统的 requests 库只能获取初始 html 源码,无法拿到 ajax 或前端框架(如vue、react)渲染后的内容。要解决这个问题,需要借助能执行 JavaScript 的工具。
使用 Selenium 模拟浏览器操作
Selenium 是一个强大的 自动化 测试工具,它可以启动真实的浏览器(如chrome、firefox),完整执行 JavaScript,适合处理复杂的动态页面。
技术要点:
- 安装 selenium 库和对应浏览器的驱动(如 chromedriver)
- 通过 WebDriver 加载页面,等待 JS 执行完成
- 使用 find_element 等方法提取渲染后的元素内容
- 可结合 time.sleep 或 WebDriverWait 实现智能等待
示例:获取由 Ajax 加载的新闻列表
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait <p>driver = webdriver.Chrome() driver.get("<a href="https://www.php.cn/link/ca14cd6c279d15639a51915b4b7917bc">https://www.php.cn/link/ca14cd6c279d15639a51915b4b7917bc</a>")</p><h1> 等待内容加载 </h1><p>element = WebDriverWait(driver, 10).until(lambda d: d.find_element(By.CLASS_NAME, "news-item") ) print(driver.page_source) driver.quit()
使用 Playwright 提升效率与稳定性
Playwright 是微软开发的现代化自动化工具,支持多浏览器(Chromium、webkit、Firefox),API 更简洁,性能优于 Selenium。
立即学习“Java 免费学习笔记(深入)”;
优势特点:
适用场景:SPA(单页应用)或需要登录交互的页面
Headless 浏览器与性能权衡
虽然 Selenium 和 Playwright 功能强大,但每次启动浏览器资源消耗较大。可通过以下方式优化:
对于简单接口,优先考虑分析 XHR 请求,直接调用 API 获取数据,比渲染整页更高效。
逆向分析 JS 请求(推荐优先尝试)
很多 JS 渲染页面的数据来自后端 API。通过浏览器开发者工具查看 Network 面板,找出关键的 XHR/fetch 请求,用 requests 直接模拟调用。
操作步骤:
- 打开 F12,刷新页面,筛选 XHR 请求
- 定位返回 JSON 数据的接口 URL 和参数
- 复制请求头(特别是cookie、User-Agent、Referer)
- 在 Python 中用 requests 或 aiohttp 发起请求
这种方式速度快、稳定性高,应作为首选方案
基本上就这些。根据目标网站的技术特点选择合适的方法:能走 API 就不渲染,必须渲染就用 Playwright 或 Selenium。关键是理解页面数据来源,再决定爬取策略。不复杂但容易忽略的是请求头和反爬机制的处理,记得合理设置延时和 IP 代理。