Python BeautifulSoup查找特定类型标记

时间:2016-05-31 08:47:29

标签: python beautifulsoup

我有一个带有嵌套标签的XML文件:

<tag1>
  <tag2>text0</tag2>
  text1
  <tag2>text2</tag2>
</tag1>
<tag2>text3</tag2>
text4
<tag1>
  <tag2>text5</tag2>
</tag1>

我希望获取所有tag2的所有内容,但前提是它们包含在tag1中。因此,在此示例中:text0text2text5。而不是text1

我目前正在双循环中执行此操作。但是文件将有多个级别,我想避免嵌套许多for循环。

这是我的代码:

tag1entries = soup.find_all('tag1')
for tag1entry in tag1entries:
  tag2entries = tag1entry.find_all('tag2')
  for tag2entry in tag2entries:
    do_something(tag2entry.contents)

有没有人知道更好的方法?

2 个答案:

答案 0 :(得分:2)

例如,您可以使用CSS selector选择tag2的直接子女tag1

tag2entries = soup.select('tag1 > tag2')

或者,在tag2内的任意位置选择tag1

tag2entries = soup.select('tag1  tag2')

答案 1 :(得分:0)

您可以使用列表理解:

entry_list = [entry.text for entry in soup.find_all('tag2') if entry.parent.name == 'tag1']

导致:

['text0', 'text2', 'text5']