当前位置: 首页 > news >正文

实战破解前端渲染:当 Requests 无法获取数据时(Selenium/Playwright 入门)

很多刚接触 Python 爬虫的朋友,都会从requests库开始 —— 发送请求、获取 HTML、解析数据,一套流程下来顺风顺水。但突然某天爬某个网站时,会发现requests拿到的 HTML 里空空如也,目标数据(比如商品价格、排行榜名次)完全找不到。这时候别慌,不是你代码写错了,而是遇到了「前端渲染」的 “拦路虎”。

一、为什么 Requests 会 “失灵”?先搞懂前端渲染

要解决问题,得先明白问题根源。我们先分清两种网页渲染方式:

1. 传统服务端渲染:Requests 的 “舒适区”

早期网站大多是「服务端渲染」—— 你访问网址时,服务器直接把完整的 HTML(包含所有文字、数据)生成好,打包发给浏览器。这时候requests发送请求,拿到的就是最终展示的 HTML,直接解析就能拿到数据,比如爬静态博客、纯文字新闻页。

2. 现代前端渲染:Requests 的 “盲区”

现在很多网站(尤其是电商、社交、数据平台)用「前端渲染」—— 服务器只发一个 “空架子” HTML,里面只有基本结构,没有实际数据。真正的数据要等浏览器加载完 JavaScript(JS)后,由 JS 动态从服务器拉取数据,再渲染到页面上。

requests的短板就在这:它只能模拟 “发送请求 - 拿 HTML” 的过程,不会执行 JS 代码。所以它拿到的永远是 “空架子”,自然找不到动态加载的数据。这时候就需要工具帮我们 “模拟浏览器行为”—— 不仅发请求,还能执行 JS、等待渲染完成,这就是 Selenium 和 Playwright 的用武之地。

二、入门 Selenium:用 “模拟浏览器” 破解渲染

Selenium 是老牌自动化测试工具,核心能力是 “操控浏览器”—— 打开浏览器、输入文字、点击按钮,就像人手动操作一样。因为它能让浏览器执行 JS,所以能拿到前端渲染后的完整数据。

1. 环境搭建:两步走

Selenium 需要 “库 + 浏览器驱动” 配合,以 Chrome 浏览器为例:

第一步:安装 Selenium 库

用 pip 直接装:

bash

pip install selenium
第二步:下载 Chrome 驱动(关键!)

Chrome 驱动是 Selenium 操控 Chrome 的 “桥梁”,必须和你的 Chrome 版本对应

  1. 打开 Chrome,在地址栏输入chrome://settings/help,查看 Chrome 版本(比如 “128.0.6613.137”);
  2. 去Chrome 驱动官网下载对应版本的驱动(如果官网进不去,可搜 “ChromeDriver 国内镜像”);
  3. 把下载的驱动文件(比如chromedriver.exe)放到 Python 安装目录,或在代码里指定驱动路径。

2. 第一个 Selenium 脚本:打开网页验证

先写个简单脚本,确认环境没问题:

python

from selenium import webdriver# 1. 初始化Chrome浏览器(如果驱动在环境变量里,不用写executable_path)
driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")# 2. 打开目标网页(比如豆瓣电影榜,动态加载数据)
driver.get("https://movie.douban.com/chart")# 3. 打印页面标题,验证是否打开成功
print("页面标题:", driver.title)# 4. 关闭浏览器(一定要关,否则会残留进程)
driver.quit()

运行后会自动打开 Chrome,跳转到豆瓣电影榜,控制台打印标题 —— 这说明 Selenium 已经能操控浏览器了。

3. 实战:爬取豆瓣电影榜动态数据

豆瓣电影榜的电影名称、评分是 JS 动态加载的,用requests拿不到,用 Selenium 就能解决。核心是 “等待元素加载完成”(避免 JS 还没渲染完就去查元素):

python

from selenium import webdriver
from selenium.webdriver.common.by import By  # 用于定位元素
from selenium.webdriver.support.ui import WebDriverWait  # 显式等待
from selenium.webdriver.support import expected_conditions as EC  # 等待条件# 初始化浏览器
driver = webdriver.Chrome(executable_path="C:/chromedriver.exe")
try:# 打开豆瓣电影榜driver.get("https://movie.douban.com/chart")# 关键:显式等待——等待电影列表元素加载,最多等10秒# 这里用CSS选择器定位“电影条目”(可通过浏览器F12查看元素)wait = WebDriverWait(driver, 10)movie_list = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".item")))# 提取数据for movie in movie_list:# 定位电影名称(CSS选择器:.title a)title = movie.find_element(By.CSS_SELECTOR, ".title a").text# 定位评分(CSS选择器:.rating_nums)score = movie.find_element(By.CSS_SELECTOR, ".rating_nums").textprint(f"电影:{title} | 评分:{score}")
finally:# 不管成功失败,都关闭浏览器driver.quit()

运行后,你会看到 Chrome 自动打开页面,等待几秒后,控制台输出所有电影的名称和评分 —— 这就是前端渲染后的数据!

4. Selenium 避坑指南

  • 驱动版本不匹配:最常见错误!如果报错 “session not created”,先检查 Chrome 版本和驱动版本是否一致;
  • 等待时间不够:不要用time.sleep()(固定等几秒,不稳定),一定要用WebDriverWait显式等待,等元素出现再操作;
  • 浏览器残留:每次脚本结束必须调用driver.quit(),否则任务管理器里会有很多 Chrome 进程。

三、入门 Playwright:更省心的 “新一代工具”

Selenium 虽然好用,但 “手动装驱动”“手动处理等待” 对新手不够友好。微软推出的 Playwright 解决了这些痛点 —— 自动管理驱动、自动等待元素,API 更简洁,新手入门更快。

1. 环境搭建:一步到位

Playwright 不需要手动下载驱动,安装时会自动搞定:

第一步:安装 Playwright 库

bash

pip install playwright
第二步:自动安装浏览器和驱动

运行这条命令,Playwright 会自动下载 Chrome、Firefox、Safari 的驱动(第一次运行有点慢,耐心等):

bash

playwright install

如果下载慢,可换国内源(先设置环境变量,再执行playwright install):

bash

# Windows命令行
set PLAYWRIGHT_DOWNLOAD_HOST=https://playwright-assets.dp.tech
# Mac/Linux终端
export PLAYWRIGHT_DOWNLOAD_HOST=https://playwright-assets.dp.tech

2. 第一个 Playwright 脚本:页面截图

Playwright 支持 “同步” 和 “异步” 两种写法,新手先学同步(更简单):

python

from playwright.sync_api import sync_playwright# 用with语句管理Playwright,自动释放资源(不用手动关浏览器)
with sync_playwright() as p:# 启动Chrome浏览器(headless=False:显示浏览器窗口,方便调试)browser = p.chromium.launch(headless=False)# 新建一个标签页page = browser.new_page()# 打开知乎首页page.goto("https://www.zhihu.com")# 截图保存(验证页面是否加载成功)page.screenshot(path="zhihu.png")# 关闭浏览器browser.close()

运行后会打开 Chrome,跳转到知乎,自动截图保存为zhihu.png—— 整个过程不用管驱动,非常省心。

3. 实战:爬取电商动态商品价格

以某电商平台的 “热销商品” 为例(数据动态加载),用 Playwright 爬取商品名和价格:

python

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:# 启动Chrome,无头模式(headless=True:不显示浏览器窗口,更节省资源)browser = p.chromium.launch(headless=True)page = browser.new_page()# 打开目标页面(这里用示例链接,实际替换为真实电商页)page.goto("https://example.com/hot-products")# 关键:Playwright会自动等待元素加载,也可显式等(更稳妥)# 等待商品列表元素出现,最多等8秒page.wait_for_selector(".hot-product-item", timeout=8000)# 提取数据:用query_selector_all定位所有商品products = page.query_selector_all(".hot-product-item")for product in products:# 提取商品名(text_content():获取元素文本)name = product.query_selector(".product-name").text_content().strip()# 提取价格price = product.query_selector(".product-price").text_content().strip()print(f"商品:{name} | 价格:{price}")browser.close()

运行后,控制台会直接输出商品数据 —— 没有手动装驱动,没有复杂的等待配置,比 Selenium 更简洁!

4. Playwright 的核心优势

  • 自动管理驱动:不用手动下载、匹配驱动,安装时一步搞定;
  • 智能等待:默认会等待元素可操作(比如按钮能点击、文本能读取),不用手动写等待逻辑;
  • 多浏览器支持:一行代码切换 Chrome、Firefox、Safari,不用改其他逻辑;
  • 无头模式稳定:相比 Selenium,Playwright 的无头模式更流畅,不易报错。

四、Selenium vs Playwright:新手该选谁?

对比维度SeleniumPlaywright
驱动管理手动下载、匹配版本自动安装、维护
等待机制需手动写显式等待智能自动等待
API 简洁度较繁琐(多导入模块)简洁(单模块搞定)
学习成本较高(需记等待、定位细节)较低(新手易上手)
生态资料丰富(老牌工具)较新(但官方文档很全)

新手推荐优先学 Playwright:不用踩 “驱动匹配” 的坑,API 简单,能快速解决 “爬不到动态数据” 的问题;如果需要对接旧项目(很多公司用 Selenium 做自动化测试),再补充学习 Selenium。

五、总结与进阶方向

requests拿不到数据时,记住核心思路:用工具模拟浏览器行为,执行 JS 并等待前端渲染完成。Selenium 和 Playwright 都是实现这个思路的入门工具,掌握后能解决 80% 的前端渲染爬取需求。

后续可以往这些方向进阶:

  1. 反反爬优化:设置浏览器 User-Agent、添加代理 IP,避免被网站封禁;
  2. 页面交互:模拟点击按钮、输入搜索关键词(比如爬 “点击加载更多” 的数据);
  3. 效率提升:用多线程 / 多进程同时操控多个浏览器,加快爬取速度;
  4. 无头模式优化:生产环境用无头模式(不显示浏览器),节省服务器资源。

从 “爬不到数据” 到 “轻松获取动态数据”,只差一个 “模拟浏览器” 的工具 —— 动手试试上面的代码,你会发现前端渲染的 “坑” 其实很好填!

http://www.dtcms.com/a/435099.html

相关文章:

  • 如何建立小企业网站论坛源码哪个好
  • 网站建设摊销时间是多久seo咨询服务
  • 精细化工企业安全运营:危化品投料记录与反应釜压力实时监控方案
  • 网站的ftp信息推广公司哪里找
  • 【精品资料鉴赏】384页WORD版小学智慧校园项目建设初步设计方案
  • 手机移动网站建设怎么把网站放到服务器
  • 《牛刀小试!C++ string类核心接口实战编程题集》
  • 做视频网站资源采集软件app定制开发
  • 【原创】SpringBoot3+Vue3商品信息管理系统
  • 3 阐述网站建设的步骤过程哪种网站开发简单
  • Spring Boot 热部署配置与自定义排除项
  • B007基于博途西门子1200PLC四节传送带控制系统仿真
  • C++11新特性解析与应用(1)
  • 【LangChain】P7 对话记忆完全指南:从原理到实战(下)
  • 上海建设房屋网站下载好了网站模板怎么开始做网站
  • 远程智能康养实训室:训练学生驾驭物联网,服务未来居家康养新时代
  • ⚡ WSL2 搭建 s5p6818 Linux 嵌入式开发平台(part 1):环境准备与架构设计
  • 学科建设网站wordpress 主体安装
  • 如何免费建立自己的网站中国建设摩托车
  • 主机服务器网站 怎么做孝义网站建设
  • 快速搭建企业网站阿里虚拟机建设网站
  • 山西建设机械网站首页备案添加网站
  • 店面建设网站的必要性58同城装修设计师
  • C语言笔记
  • 23ICPC合肥站补题
  • LR算法中反向最右推导(Reverse RightMost Derivation)
  • 企业网站托管服务常用指南wordpress ssl证书
  • 专注于响应式网站开发高端定制网站建设高端旅游定制
  • django网站开发教程杭州最便宜的网站建设
  • rpm包的安装方法