【问题标题】:BeautifulSoup Insert HTML data attributeBeautifulSoup 插入 HTML 数据属性
【发布时间】:2016-08-28 11:29:58
【问题描述】:

我试图在我的汤中插入一个新的 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/) 上声明“某些属性,例如 HTML 5 中的 data-* 属性,其名称不能用作关键字参数”,而是建议使用 attrs={"data-foo": "value"}。关键是它确实适用于某些方法(例如: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>

这是一个已知的错误/限制还是我遗漏了什么? 任何提示表示赞赏!

【问题讨论】:

    标签: python beautifulsoup


    【解决方案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>
    

    【讨论】:

    • 哇,原来这么简单……我总是试图把它复杂化。谢谢 ! :)
    • 我使用的是 bs4,tag2["data-toggle"] = "pill" 不能只工作 tag2.attrs["data-toggle"] = "pill"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2017-11-19
    相关资源
    最近更新 更多