ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python xml遍历问题和答案

2019-10-30 10:56:31  阅读:210  来源: 互联网

标签:beautifulsoup elementtree xml python xml-parsing


我将调查响应存储在xml中,但是不幸的是xml的构建不是统一的.
参见下面的xml.

我想遍历div,然后将所有< b>元素作为问题,但我不确定如何处理答案,因为有时它们会包含在子< div"有时不是. 我当时在考虑使用elementtree的互文或漂亮的汤.但是BeautifulSoup如果我执行soup.find_all(‘div’),则会返回所有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>

解决方法:

遍历顶级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

标签:beautifulsoup,elementtree,xml,python,xml-parsing
来源: https://codeday.me/bug/20191030/1967441.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有