python 用 bs4 解析 xml 得到元素列表
python parsing with bs4 an xml to get a list of elements
我有一个 xml 文件,其中包含以下形式的数据:
<head xml:id="_2ebf9c0003">\n\nTECHNICAL FIELD</head>\n
<p n="0001" xml:id="_2ebf9c0004">whatever</p>
<p n="0002" xml:id="_2ebf9c0004">whatever</p>
<... other tags and data...>
<head xml:id="_2ebf9c0003">\n\nTITLE</head>\n
我知道如何获取特定元素,例如:
from bs4 import BeautifulSoup
soup = BeautifulSoup(PDM_description, 'lxml')
title_element = soup.title$
importing all p elements
paras = soup.findAll('p')
问题是如何在查询中添加 OR 以获得“p”或“head”元素的列表?更一般的如何获取所有带有标签的元素属于一个列表。
伪代码:
paras = soup.findAll('p' OR 'head')
您离目标很近了,只需将带有标签的列表添加到您的 find_all()
:
soup.find_all(['p','head'])
注意: 在新代码中使用 find_all()
而不是旧的 findAll()
语法
您可以使用 ,
CSS 选择器,定义用逗号分隔的标签 (,
)。要使用 CSS 选择器,请使用 .select()
方法:
print(
soup.select("p, head")
)
我有一个 xml 文件,其中包含以下形式的数据:
<head xml:id="_2ebf9c0003">\n\nTECHNICAL FIELD</head>\n
<p n="0001" xml:id="_2ebf9c0004">whatever</p>
<p n="0002" xml:id="_2ebf9c0004">whatever</p>
<... other tags and data...>
<head xml:id="_2ebf9c0003">\n\nTITLE</head>\n
我知道如何获取特定元素,例如:
from bs4 import BeautifulSoup
soup = BeautifulSoup(PDM_description, 'lxml')
title_element = soup.title$
importing all p elements
paras = soup.findAll('p')
问题是如何在查询中添加 OR 以获得“p”或“head”元素的列表?更一般的如何获取所有带有标签的元素属于一个列表。
伪代码:
paras = soup.findAll('p' OR 'head')
您离目标很近了,只需将带有标签的列表添加到您的 find_all()
:
soup.find_all(['p','head'])
注意: 在新代码中使用 find_all()
而不是旧的 findAll()
语法
您可以使用 ,
CSS 选择器,定义用逗号分隔的标签 (,
)。要使用 CSS 选择器,请使用 .select()
方法:
print(
soup.select("p, head")
)