美丽的汤:获取xml-ish文件中所有<tag>的内容

时间:2016-02-03 07:59:54

标签: python xml beautifulsoup

我有一个xml-ish文件,我试图用BeautifulSoup解析,让我们说另一个标签的树中有一个未知的标签。事情顺便进行,至少对于我在一组nexted标签中提取的第一个标签。这不是真正的html或xml,而是关闭......

给定格式:

<data>
<type>
    <type_attribute_1>1</type_attribute_1>
    <type_attribute_2>2</type_attribute_2>
</type>
<type>
    <type_attribute_1>3</type_attribute_1>
    <type_attribute_2>4</type_attribute_2>
</type>
</data>

如何为两个类型标记提取type_attribute_1和type_attribute_2的值并分配给变量 - 即“Type_1_attribute_1”,“Type_1_attribute_2”,“Type_2_attribute_1”&amp; “Type_2_attribute_2”

我正在使用这样的代码,但它仅适用于位于<type>内的第一个<data>

Type_1_Attribute_1 = soup.data.type.type_attribute_1.text
Type_1_Attribute_2 = soup.data.type.type_attribute_2.text

更新

我认为用一些不同的方式来表达我所寻求的东西可能有所帮助。我不知道变量名称Type_1_Attribute_1,因为我不知道有多少类型的兄弟姐妹,将“_1”,“_ 2”,“_ 3”...添加到“类型”,对于每个兄弟。即, 假设:

Types = [i.stripText() for i in soup.select('Type')]
parseables = len(Types)
for i in range(0, parseables)
    j = i+1
    Type = Types[i]
    Attribute_1 = Type.Type_Attribute_1.text 
    print Attribute_1

为每个Type打印Attribute_1的值,如何在Attribute_1中添加“Type_j”以用j的值填充?

1 个答案:

答案 0 :(得分:2)

这个怎么样 -

from bs4 import BeautifulSoup as bs

data  = """<data>
<type>
    <type_attribute_1>1</type_attribute_1>
    <type_attribute_2>2<2/type_attribute_2>
</type>
<type>
    <type_attribute_1>3</type_attribute_1>
    <type_attribute_2>4</type_attribute_2>
</type>
</data>"""

soup = bs(data,'lxml')

Type_1_Attribute_1 = [i.text.strip() for i in soup.select('type_attribute_1')]
Type_1_Attribute_2 = [i.text.strip() for i in soup.select('type_attribute_2')]

print filter(bool,Type_1_Attribute_1)
print filter(bool,Type_1_Attribute_2)

输出 -

[u'1', u'3']
[u'2', u'4']

EDIT 我没有得到你,为什么你需要这个循环在列表本身的变量(迭代器) - 例如

for i in Type_1_Attribute_1:
    print (i)# here i itself a variable and it changes when i reiterate

打印 -

1
3

因此,如果您需要使用该列表中的每个项目,只需使用迭代器并在传递给print函数时传递给函数。