使用Beautiful Soup无法提取网页目标数值170,返回模板表达式的问题咨询
问题解答:无法提取170的原因及模板表达式说明
一、先搞懂那个表达式是什么
{{ property.minRateInCents / 100 | numberFormat(0) }} 是前端模板引擎的语法,常见于Vue.js、Twig这类前端框架或模板系统中,它的作用是动态计算并格式化价格:
property.minRateInCents:这是前端代码里的一个变量,存的是价格的分单位数值(比如170对应的就是17000分)/ 100:把分转换成当地货币的基本单位(这里就是R$的元单位)| numberFormat(0):这是一个「过滤器」,用来格式化数值,(0)表示保留0位小数,最终得到整数170。
二、为什么Beautiful Soup拿不到170?
这是因为Beautiful Soup只能抓取服务器直接返回的原始HTML源码,而170这个数值是在浏览器端通过JavaScript渲染生成的:服务器返回的只是模板占位符,当浏览器加载页面时,会执行对应的JS代码,把这个模板表达式替换成实际的数值170。你用Beautiful Soup爬取到的是未渲染的原始模板代码,自然看不到170。
三、怎么才能拿到170?
有两种常见的解决思路:
- 用浏览器自动化工具:比如
selenium或playwright,它们可以模拟打开真实的浏览器,等待页面完全渲染完成后,再提取内容,这样就能拿到已经替换好的170了。 - 直接抓API接口:打开浏览器的开发者工具(F12),切换到「网络」标签,刷新页面,找返回价格数据的API请求(通常是XHR或Fetch类型),直接请求这个接口就能拿到原始的价格数据,这种方式比模拟浏览器效率更高。
内容的提问来源于stack exchange,提问作者Matheus Douglas
相关产品推荐
相关产品推荐

