如何在beautifulsoup中处理重复的标签

时间:2014-01-08 01:56:13

标签: python xml beautifulsoup

<system>
  <load><avg01>0.03</avg01><avg05>0.15</avg05><avg15>0.16</avg15></load>
  <cpu><user>7.4</user>
  <system>3.2</system>
  <wait>0.9</wait></cpu>
  <memory><percent>17.1</percent>
  <kilobyte>1220364</kilobyte></memory>
  <swap><percent>0.0</percent>
  <kilobyte>396</kilobyte></swap>
</system>

如何在beautifulsoup中获取整个系统标记并跳过中间标记。请注意,外部系统标签内部有系统标签。

r = requests.get(url, timeout=0.5)
result = BeautifulSoup(r.content)

for item in result.findAll('system'):
    print item

OUTOUT 
<system><load><avg01>0.03</avg01><avg05>0.10</avg05><avg15>0.13</avg15></load><cpu><user>7.7</user></cpu></system>

此外,我想获得百分比值,但整个xml中有很多百分比的标签被拉出来。

2 个答案:

答案 0 :(得分:0)

首先,只匹配外部的一个。之后,您可以遍历它以查看内容

>>> for item in soup.find('system'):
    print item


<load><avg01>0.03</avg01><avg05>0.15</avg05><avg15>0.16</avg15></load>


<cpu><user>7.4</user>
<system>3.2</system>
<wait>0.9</wait></cpu>


<memory><percent>17.1</percent>
<kilobyte>1220364</kilobyte></memory>


<swap><percent>0.0</percent>
<kilobyte>396</kilobyte></swap>

答案 1 :(得分:0)

只需使用soup.system

即可
from bs4 import BeautifulSoup

html = """
<system>
  <load><avg01>0.03</avg01><avg05>0.15</avg05><avg15>0.16</avg15></load>
  <cpu><user>7.4</user>
  <system>3.2</system>
  <wait>0.9</wait></cpu>
  <memory><percent>17.1</percent>
  <kilobyte>1220364</kilobyte></memory>
  <swap><percent>0.0</percent>
  <kilobyte>396</kilobyte></swap>
</system>
"""

soup = BeautifulSoup(html)

print soup.system

这会产生:

<system>
<load><avg01>0.03</avg01><avg05>0.15</avg05><avg15>0.16</avg15></load>
<cpu><user>7.4</user>
<system>3.2</system>
<wait>0.9</wait></cpu>
<memory><percent>17.1</percent>
<kilobyte>1220364</kilobyte></memory>
<swap><percent>0.0</percent>
<kilobyte>396</kilobyte></swap>
</system>