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



我有一个xml-ish文件,我正在尝试用BeautifulSoup解析,假设另一个标签的树中有一个未知的标签倍数。事情进展顺利,至少对于我在下一个标签集中提取的第一个标签。这不是真正的 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"和"Type_2_attribute_2">

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

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

哪个打印每种类型的Attribute_1值,我将如何在Attribute_1中添加"Type_j"以填充j的值?

这个呢-

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']

编辑我不明白你,为什么你需要这个,循环访问列表本身是一个变量(迭代器(- 例如

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

指纹-

1
3

因此,如果您需要使用该列表中的每个项目,只需使用迭代器并传递给函数,就像我传递给函数一样print

最新更新