python - 从简单的 html 中提取文本和(hlStart 和 hlEnd)标签
问题描述
我有以下部分的 html/xml 文件:
<p><hlstart ana="#ann224094"></<hlstart>Przed<hlend ana="#ann224094"></hlend> <hlstart ana="#ann224160"></hlstart>nami <hlend ana="#ann224160"></hlend>jeszcze trzy <hlstart ana="#ann224159"></hlstart>dni,<hlend ana="#ann224159"></hlend></p>
我想提取文本和标签以将它们排列在表格中,例如:
text, nonana
text, ana
其中 ana 表示标签,例如 #ann224094 来自
<hlstart ana="#ann224094"></<hlstart>Przed<hlend ana="#ann224094"></hlend>
nonana 表示文本没有 ana 标记。
przed, #ann224094
nami, #ann224160
jeszcze trzy, nonana
我已经用我的 xml 数据的其他部分尝试了 bs4 和 htmlparser,但我不明白那部分。我可以使用 .text 方法导出整个文本,所有字符串,但我需要知道哪些单词有 ana 标签。此外,所有带有 ana 标签的单词在我的文件后面都有特定的标签。
解决方案
from bs4 import BeautifulSoup
txt = '''<p><hlstart ana="#ann224094"></hlstart>Przed<hlend ana="#ann224094"></hlend> <hlstart ana="#ann224160"></hlstart>nami <hlend ana="#ann224160"></hlend>jeszcze trzy <hlstart ana="#ann224159"></hlstart>dni,<hlend ana="#ann224159"></hlend></p>'''
soup = BeautifulSoup(txt, 'html.parser')
out = []
for t in soup.find_all(text=True):
if t.strip() == '':
continue
prev = t.find_previous_sibling()
if prev.name == 'hlstart':
out.append( (t, prev['ana']) )
else:
out.append( (t, 'noana') )
# print it to screen:
from pprint import pprint
pprint(out)
印刷:
[('Przed', '#ann224094'),
('nami ', '#ann224160'),
('jeszcze trzy ', 'noana'),
('dni,', '#ann224159')]
推荐阅读
- paypal - 使用 PayPal 在 Shopify 中创建沙盒测试付款?
- android - 什么是 *.tflite 模型输出
- c++ - 为什么要使用双指针来创建队列?
- javascript - 搜索数组:TypeError:无法读取未定义的属性
- algorithm - 需要一种可以使用不模糊的首字母缩写词的搜索算法(使用 Elm,尽管有任何帮助)
- build - MariaDB 10.3 的非 galera 软件包问题
- pytorch - TORCH_GEOMETRIC.TRANSFORMS 中的 ToSparceTensor 变换究竟返回了什么?
- javascript - 使用 moment.js 验证英国日期
- django - Django Forms:非模型字段不呈现具有“查看”权限的值
- git - 我如何克服致命的存储库未找到错误