pythonxml迭代问题和答案

2024-10-03 21:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我将调查结果存储在xml中,不幸的是,xml并不是统一构建的。 请参见下面的xml。你知道吗

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

我在考虑使用elementtree的互文或美丽的汤。但是如果我执行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>

Tags: 答案namediv元素yourishtmlbody
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:19

迭代顶级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

相关问题 更多 >