Python xml迭代问题和答案

时间:2013-09-25 10:24:28

标签: python xml xml-parsing beautifulsoup elementtree

我有调查回复存储在xml中,遗憾的是xml没有统一构建。 见下文xml。

我想迭代div然后将所有<b>元素拉出来作为问题,但我不知道如何处理答案,因为它们有时包含在子<div>中,有时候不

我在考虑使用elementtree的intertext或美丽的汤。但是,如果我做soup.find_all('div'),BeautifulSoup会返回所有div,包括内部div。 tree.itertext()有点工作,但我不希望有太多嵌套循环。

有关如何最好地处理这种情况的任何建议吗?

 <html>
 <body>
  <div>
   <b>Question 1: What is your name?</b>
   My name is Peter.
  </div>
  <div>
   <b>Question 2: What is your native language?</b>
   <div>Esperanto</div>
  </div>
 </body>
</html>

1 个答案:

答案 0 :(得分:4)

迭代顶级div,从b标签中提取问题文本,从下一个兄弟或下一个兄弟的下一个兄弟的文本中提取答案:

from bs4 import BeautifulSoup

soup = BeautifulSoup("""
<html>
 <body>
  <div>
   <b>Question 1: What is your name?</b>
   My name is Peter.
  </div>
  <div>
   <b>Question 2: What is your native language?</b>
   <div>Esperanto</div>
  </div>
 </body>
</html>
""")

for div in soup.find('body').findAll('div', recursive=False):
    question = div.find('b')
    print question.text
    print question.nextSibling.strip() or question.nextSibling.nextSibling.text.strip()

打印:

Question 1: What is your name?
My name is Peter.
Question 2: What is your native language?
Esperanto