我有调查回复存储在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>
答案 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