我一直试图在我的汤中插入一个新的HTML标签,但无法弄清楚如何继续。问题是我希望标签具有属性" data-toggle"但BeautifulSoup似乎无法解决这个问题。
In [79]: tag = soup.new_tag("li")
In [80]: tag
Out[80]: <li></li>
In [81]: tag2 = soup.new_tag("a")
In [82]: tag.append(tag2)
In [83]: tag
Out[83]: <li><a></a></li>
In [89]: tag = soup.new_tag("li")
In [90]: tag2 = soup.new_tag("a",href="#")
In [91]: tag2 = soup.new_tag("a",data-toggle="pill")
File "<ipython-input-91-554760df4122>", line 1
tag2 = soup.new_tag("a",data-toggle="pill")
^
SyntaxError: keyword can't be an expression
我已经搜索了这个错误并最终在bs4文档页面(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)上说明了&#34;某些属性(如HTML 5中的data- *属性)具有不可能的名称用作关键字参数的名称&#34;而是建议使用attrs = {&#34; data-foo&#34;:&#34; value&#34;}。关键是它实际上可以使用某些方法(例如:find_all)但不能使用new_tag()。
In [97]: tag2 = soup.new_tag("a",attrs={"data-toggle":"pill"})
In [98]: tag2
Out[98]: <a attrs="{'data-toggle': 'pill'}"></a>
这是一个已知的错误/限制还是我错过了什么? 任何暗示都赞赏!
答案 0 :(得分:1)
您的属性包含破折号,因此您需要使用[]
>>> tag2 = soup.new_tag("a")
>>> tag2["data-toggle"] = "pill"
>>> tag2
<a data-toggle="pill"></a>
你也可以这样做:
>>> tag2.attrs["data-toggle"] = "pill"
>>> tag2
<a data-toggle="pill"></a>