如何使用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
相关产品推荐
相关产品推荐

