我有一个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
。