爬虫实战:如何优雅地抓取网页中隐藏在伪元素(__before)里的文本?
相信很多写过一段时间爬虫的同学大概率撞过这堵“隐形墙”在浏览器里明明白白显示着9.9的价格或者一段验证码文本但当你切换到 DevTools 时发现那个数字安安静静地挂在某个标签里。然而当你用 requests 抓下来再用 BeautifulSoup 或 XPath 去提取得时候拿到的却是一个空列表。即便你认为是 JS 动态加载一通 Selenium 渲染操作后DOM 里依旧是一无所有。这其实并非 JS 的锅而是 CSS **伪元素Pseudo-elements**在作祟。今天这篇文章我们就从技术根源出发手把手教你如何破除这层“伪装”并结合强大的代理工具实现稳定抓取。根因剖析文本去哪了问题的根源在于你想要抓取的文本根本就不在 DOM 树里。这些文本通常是 CSS 引擎根据 ::before 或 ::after 伪元素的 content 属性在运行时凭空生成的。因为伪元素并不属于 DOM 节点集合传统的 getElementById、querySelector 或者 XPath 自然全都失效了。在动手写代码前我们必须先分清 content 的四种常见取值来源写死的字符串例如 content: “9.9”;值直接硬编码在 CSS 规则中。attr()attr() 函数引用例如 content: attr(data-price);真实数据其实藏在 HTML 元素的>破局方案与实战演示应对这种反爬我们的决策优先级永远是能拿接口绝不渲染能抓静态绝不上自动化。首选方案直采接口。绝大数伪元素只是装饰背后都有明文 JSON 接口支撑。找到接口直接发纯 HTTP 请求速度快且反爬压力小。次选方案正则解析 CSS。如果 content 是写死的字符串或来自 attr()可以直接把 CSS 抓下来用正则提取不需要启动浏览器。终极方案渲染引擎 代理 IP。当 CSS 是动态注入的或者强制使用 counter() 渲染时我们就必须祭出 Selenium / Playwright 并调用 window.getComputedStyle 来读取最终样式。渲染抓取实战配合爬虫代理走到终极方案时一个无法回避的问题是单个 IP 使用 Selenium 频繁访问其极其明显的自动化特征会迅速触发验证码甚至封禁。浏览器需要加载完整资源、停留时间长IP 暴露面极大。在这类渲染型抓取中因为会话连续性如保持登录态、Cookie 验证、表单提交的要求一旦中途跳变 IP会导致之前的验证全部失效。此时我们需要使用代理厂商提供的固定转发模式。以爬虫代理为例其固定转发模式能够在一个特定时间窗口通常 1 到 3 分钟内保持出口 IP 一致完美契合了渲染型会话的需要。以下是基于 Selenium 接入固定转发代理并抓取伪元素数据的完整示例代码# 推荐使用 selenium-wire 以支持原生不支持的代理账密认证fromseleniumwireimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECimporttime# 1. 配置亿牛云代理固定转发模式保持IP在时间窗口内连续proxyHostt.16yun.cnproxyPort31111proxyUserusername# 替换成你的账号proxyPasspassword# 替换成你的密码options{proxy:{http:fhttp://{proxyUser}:{proxyPass}{proxyHost}:{proxyPort},https:fhttp://{proxyUser}:{proxyPass}{proxyHost}:{proxyPort},no_proxy:localhost,127.0.0.1# 绕过本地请求}}# 2. 启动浏览器driverwebdriver.Chrome(seleniumwire_optionsoptions)try:urlhttps://example.com/product/123driver.get(url)# 3. 避免 headless 时序陷阱不能仅等待元素存在要轮询判断 content 是否渲染# 定义一个自定义的等待函数轮询获取 ::before 的内容deadlinetime.time()10# 10秒超时extracted_priceNonewhiletime.time()deadline:# 执行 JS 获取 getComputedStylevaldriver.execute_script(return getComputedStyle(document.querySelector(.price), ::before).getPropertyValue(content);)# 伪元素存在时有效内容不会是空或 noneifvalandval!none:# getPropertyValue(content) 返回的结果通常会包裹着额外的双引号或单引号extracted_priceval.strip().strip()breaktime.sleep(0.3)ifextracted_price:print(f成功抓取伪元素价格:{extracted_price})else:print(伪元素内容未能在规定时间内渲染。)finally:driver.quit()进阶避坑指南在实操过程中再点出几个很容易踩坑的地方返回值自带引号就像代码中展示的一样使用 getPropertyValue(‘content’) 取出来的如果是字符串它会原样返回 ““9.9”。一定要用 strip(”‘).strip(’) 进行清洗不然你的数据库里全都是脏数据。警惕图片“文字”如果 content 返回的是 url(…)请立刻停止尝试提取文本那实质上是一张图片。你要么去找其他数据源接口要么只能引入复杂的 OCR 链路。不要轻信 attr()attr()如果通过静态解析 CSS 发现 content 是 attr(data-price)千万别以为大功告成了你拿到的只是一个表达式。你必须回到那个真实的 DOM 节点上去提取它自身的>

相关新闻

5分钟掌握RoundedTB:让Windows任务栏焕然一新的魔法指南

5分钟掌握RoundedTB:让Windows任务栏焕然一新的魔法指南

5分钟掌握RoundedTB:让Windows任务栏焕然一新的魔法指南 【免费下载链接】RoundedTB Add margins, rounded corners and segments to your taskbars! 项目地址: https://gitcode.com/gh_mirrors/ro/RoundedTB 想让单调的Windows任务栏瞬间变得现代时尚吗&…

2026/7/7 8:04:08 阅读更多 →
2026 视频主要内容方案选型:怎么选才能合理控制研发项目成本

2026 视频主要内容方案选型:怎么选才能合理控制研发项目成本

先说明白核心判断 针对学生群体课堂复习、论文调研、知识自测的场景,选2026年视频主要内容处理方案控制项目成本,核心逻辑是匹配需求选功能,不为用不到的企业级服务付费:轻度需求用免费额度覆盖,高频学习需求选适配学…

2026/7/7 8:00:07 阅读更多 →
AI 时代的“数字义乌“来了:NaviAI Hub 要做中国数字产品的全球中转站

AI 时代的“数字义乌“来了:NaviAI Hub 要做中国数字产品的全球中转站

四十年前,义乌人用麻袋背着纽扣和拉链走南闯北,把小商品卖到了全中国。二十年前,义乌国际商贸城的商户开始接来自中东、非洲和欧美的订单,义乌的"小商品指数"成了全球贸易的晴雨表。 现在,一个新的"义乌…

2026/7/7 7:58:06 阅读更多 →

最新新闻

Elmer FEM终极指南:5个技巧让开源多物理场仿真变得简单

Elmer FEM终极指南:5个技巧让开源多物理场仿真变得简单

Elmer FEM终极指南:5个技巧让开源多物理场仿真变得简单 【免费下载链接】elmerfem Official git repository of Elmer FEM software 项目地址: https://gitcode.com/gh_mirrors/el/elmerfem Elmer FEM是一款功能强大的开源多物理场有限元仿真软件&#xff0c…

2026/7/7 8:58:25 阅读更多 →
惠普游戏本终极性能控制:用OmenSuperHub彻底告别官方臃肿软件

惠普游戏本终极性能控制:用OmenSuperHub彻底告别官方臃肿软件

惠普游戏本终极性能控制:用OmenSuperHub彻底告别官方臃肿软件 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还…

2026/7/7 8:58:25 阅读更多 →
Web安全必修课:从原理到实战,全面掌握XSS漏洞防御与修复

Web安全必修课:从原理到实战,全面掌握XSS漏洞防御与修复

1. 项目概述:为什么XSS漏洞是每个Web开发者的必修课如果你是一名Web开发者,或者正在管理一个网站,那么“XSS漏洞”这个词对你来说,绝对不应该陌生。它就像潜伏在代码里的幽灵,平时不声不响,一旦被利用&…

2026/7/7 8:56:25 阅读更多 →
Windows 10终极指南:PL-2303旧版芯片驱动完整安装解决方案

Windows 10终极指南:PL-2303旧版芯片驱动完整安装解决方案

Windows 10终极指南:PL-2303旧版芯片驱动完整安装解决方案 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10系统无法正常使用PL-2303串口设…

2026/7/7 8:54:24 阅读更多 →
Token 与时间双维度 ROI:生成质量不是唯一考核指标

Token 与时间双维度 ROI:生成质量不是唯一考核指标

Token 与时间双维度 ROI:生成质量不是唯一考核指标 一、老板问"花这么多钱值不值",你该怎么算 AI 项目的预算审核越来越严格。上季度花了 8 万元在 API 调用上。财务问:这笔钱带来了什么业务价值?传统回答是"提升了…

2026/7/7 8:54:24 阅读更多 →
Java十大排序算法知识点总结

Java十大排序算法知识点总结

一、排序算法概述排序算法是计算机科学中最基础、最重要的算法之一,它负责将一组数据按照特定顺序(升序或降序)重新排列。在Java编程中,掌握各种排序算法的原理、实现和适用场景,对于提升编程能力和解决实际问题至关重…

2026/7/7 8:52:24 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻