You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用BeautifulSoup添加带查询参数的script标签且不编码URL?

解决BeautifulSoup添加script标签时URL查询参数被转义的问题

当你用BeautifulSoup创建带查询参数的script标签时,默认的HTML格式化会自动转义&为&,如果需要保留原始URL不被编码,可以通过以下两种方式处理:

方法1:手动设置属性+输出时禁用转义

先创建空的script标签,再直接赋值src属性,最后输出时指定formatter=None来避免特殊字符转义:

jsmanager = self.soup.new_tag("script")
# 直接赋值原始URL
jsmanager['src'] = "https://example.com/myscript.js?data=test&alarm=1"
self.soup.select_one("head").append(jsmanager)

# 输出HTML时禁用转义
html_output = self.soup.prettify(formatter=None)
# 或者用str()输出时指定formatter
html_output = str(self.soup(formatter=None))

方法2:通过attrs参数创建标签+输出控制

创建标签时使用attrs字典传入原始URL,同样在输出时控制格式化器:

jsmanager = self.soup.new_tag("script", attrs={'src': "https://example.com/myscript.js?data=test&alarm=1"})
self.soup.select_one("head").append(jsmanager)

# 输出时不转义特殊字符
print(self.soup.prettify(formatter=None))

补充说明

其实在BeautifulSoup内部存储的属性值是未转义的原始字符串,你可以通过print(jsmanager['src'])验证这一点——只会输出原始的https://example.com/myscript.js?data=test&alarm=1。只有当你将整个soup对象转换为HTML字符串时,默认的格式化器才会对&进行转义,所以核心是在输出阶段禁用转义逻辑。

内容的提问来源于stack exchange,提问作者Daniel Vygolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:55:16