我正在尝试从 HTML 文件中获取文本数据并根据其标签重新格式化它们。HTML 文件如下所示:
<!doctype html>
(some HTML code)
<section id="descrption">
descrption_text_0
<span class="ac"><span class="ac">1a.</span></span>
descrption_text_1
<i>italic_0</i>
<span class="ac"><span class="ac">1b.</span></span>
descrption_text_2
<i>italic_1</i>
</section>
(some other HTML code)
</html>
我的目标是生成一个包含“section”标签内的所有文本及其标签的数据列表,并使它们的顺序与原始 HTML 代码中的顺序保持一致,如下所示:
[('section', 'descrption_text_0'),
('ac', '1a.'),
('section', 'descrption_text_1'),
('i', 'italic_0'),
('ac', '1b.'),
('section', 'descrption_text_2'),
('i', 'italic_1')]
以下是我迄今为止尝试过的:
html = etree.HTML(my_html_file)
# this returns a list of all text without their tags
html.xpath('//section[@id="description"]//text()')
# this only gets texts inside the children of <section>, without "descrption_text_0", "descrption_text_0", etc
for el in html.iter():
if el.tag == 'section' and el.attrib['id'] == 'description':
print(el.tag)
print(el.text)
for sub_el in el.iter():
print(sub_el.tag)
print(sub_el.text)
我能想到的最后一种方法是使用 etree.trostring() 将其转换回原始 HTML 代码,然后编写另一个函数来处理它...但是有没有办法使用 etree 的内置函数来实现我的目标?或者还有其他模块可以做到这一点?提前致谢。