如何用lxml.etree同时解析XML的DIV6与DIV7节点生成结构化表格
XML API 爬取:同时解析DIV6与DIV5下的DIV7节点并生成表格
问题说明
- 熟悉HTML页面爬取,正在学习更高效简洁的XML API爬取方式
- 当前代码仅能提取XML中的
DIV6节点及其子节点,遗漏了DIV5下的DIV7兄弟节点 - 需求:实现同时解析这两类节点,并生成指定结构的表格
示例XML数据
<root> <DIV5> <DIV7> <content>DIV7内容1</content> <id>701</id> </DIV7> <DIV7> <content>DIV7内容2</content> <id>702</id> </DIV7> </DIV5> <DIV6> <content>DIV6内容1</content> <id>601</id> </DIV6> <DIV6> <content>DIV6内容2</content> <id>602</id> </DIV6> </root>
初始代码(仅处理DIV6)
import xml.etree.ElementTree as ET # 加载XML文件 tree = ET.parse('data.xml') root = tree.getroot() # 仅提取DIV6节点数据 div6_nodes = root.findall('DIV6') result = [] for node in div6_nodes: item = { 'id': node.find('id').text, 'content': node.find('content').text, 'type': 'DIV6' } result.append(item) # 打印结果 for item in result: print(item)
修改后的代码(同时解析DIV6与DIV7)
import xml.etree.ElementTree as ET tree = ET.parse('data.xml') root = tree.getroot() result = [] # 处理DIV6节点 div6_nodes = root.findall('DIV6') for node in div6_nodes: item = { 'id': node.find('id').text, 'content': node.find('content').text, 'type': 'DIV6' } result.append(item) # 处理DIV5下的DIV7节点 div5_node = root.find('DIV5') if div5_node is not None: div7_nodes = div5_node.findall('DIV7') for node in div7_nodes: item = { 'id': node.find('id').text, 'content': node.find('content').text, 'type': 'DIV7' } result.append(item) # 生成指定结构的Markdown表格 print("| ID | 内容 | 类型 |") print("|----|------|------|") for item in result: print(f"| {item['id']} | {item['content']} | {item['type']} |")
代码说明
- 新增
DIV5节点的查找逻辑,遍历其下所有DIV7子节点 - 统一数据结构,通过
type字段区分节点来源 - 最终输出标准Markdown表格,满足结构化展示需求
内容的提问来源于stack exchange,提问作者pyj
相关产品推荐
相关产品推荐

