BeautifulSoup new_tag无法插入data- * attribute

时间:2016-05-03 12:11:46

标签: python beautifulsoup

我一直试图在我的汤中插入一个新的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>

这是一个已知的错误/限制还是我错过了什么? 任何暗示都赞赏!

1 个答案:

答案 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>