【问题标题】:Dynamically specifying tags while using replaceWith in Beautiful Soup在 Beautiful Soup 中使用 replaceWith 时动态指定标签
【发布时间】:2009-05-21 04:55:46
【问题描述】:

之前我问了this这个问题,得到了这个BeautifulSoup示例代码,在当地咨询了一番之后,我决定去。

>>> from BeautifulSoup import BeautifulStoneSoup
>>> html = """
... <config>
... <links>
... <link name="Link1" id="1">
...  <encapsulation>
...   <mode>ipsec</mode>
...  </encapsulation>
... </link>
... <link name="Link2" id="2">
...  <encapsulation>
...   <mode>udp</mode>
...  </encapsulation>
... </link>
... </links>
... </config>
... """
>>> soup = BeautifulStoneSoup(html)
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>ipsec</mode>
</encapsulation>
</link>
>>> soup.find('link', id=1).mode.contents[0].replaceWith('whatever')
>>> soup.find('link', id=1)
<link name="Link1" id="1">
<encapsulation>
<mode>whatever</mode>
</encapsulation>
</link>

唯一的问题是这个例子有一个硬编码的标签值(在本例中是“mode”),我需要能够在指定的“link”标签中指定任何标签。简单的变量替换似乎不起作用。

【问题讨论】:

    标签: python xml beautifulsoup


    【解决方案1】:

    试试getattr(soup.find('link', id=1), sometag),您现在在soup.find('link', id=1).mode 中有一个硬编码标签——getattr 是 Python 获取名称作为字符串变量的属性的方式,毕竟!

    【讨论】:

      【解决方案2】:

      不用getattr:

      sometag = 'mode'
      result = soup.find('link', id=1).find(sometag)
      print result
      

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 1970-01-01
        • 2019-02-20
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多