BeautifulSoup 插入 HTML 数据属性

rei*_*ike 3 python beautifulsoup

我试图在我的汤中插入一个新的 HTML 标签,但不知道如何继续。问题是我希望标签具有“data-toggle”属性,但 BeautifulSoup 似乎无法处理这个问题。

\n\n
In [79]: tag = soup.new_tag("li")\n\nIn [80]: tag\nOut[80]: <li></li>\n\nIn [81]: tag2 = soup.new_tag("a")\n\nIn [82]: tag.append(tag2)\n\nIn [83]: tag\nOut[83]: <li><a></a></li>\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n
In [89]: tag = soup.new_tag("li")\n\nIn [90]: tag2 = soup.new_tag("a",href="#")\n\nIn [91]: tag2 = soup.new_tag("a",data-toggle="pill")\n  File "<ipython-input-91-554760df4122>", line 1\n    tag2 = soup.new_tag("a",data-toggle="pill")\n                           ^\nSyntaxError: keyword can\'t be an expression\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

我用谷歌搜索了这个错误,最终找到了一个 bs4 文档页面(https://www.crummy.com/software/BeautifulSoup/bs4/doc/),其中指出“某些属性,例如 HTML 5 中的 data-* 属性,具有不能用作关键字参数名称的名称\xe2\x80\x99”,建议使用 attrs={"data-foo": "value"}。关键是它确实可以与某些方法一起使用(例如:find_all),但不能与 new_tag() 一起使用。

\n\n
In [97]: tag2 = soup.new_tag("a",attrs={"data-toggle":"pill"}) \nIn [98]: tag2\nOut[98]: <a attrs="{\'data-toggle\': \'pill\'}"></a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是一个已知的错误/限制还是我错过了一些东西?\n任何提示表示赞赏!

\n

sty*_*ane 5

您的属性包含破折号,因此您需要使用不同的方法[]

>>> tag2 = soup.new_tag("a")
>>> tag2["data-toggle"] = "pill"
>>> tag2
<a data-toggle="pill"></a>
Run Code Online (Sandbox Code Playgroud)

您还可以这样做:

>>> tag2.attrs["data-toggle"] = "pill"
>>> tag2
<a data-toggle="pill"></a>
Run Code Online (Sandbox Code Playgroud)