3

我将调查回复存储在 xml 中,不幸的是 xml 并没有统一构建。请参阅下面的 xml。

我想遍历 div,然后将所有<b>元素作为问题提取出来,但我不确定如何处理答案,因为它们有时包含在子中<div>,有时不包含。

我正在考虑使用 elementtree 的互文或美丽的汤。但是如果我做一个soup.find_all('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>
4

1 回答 1

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
于 2013-09-25T10:32:37.820 回答