![](/img/trans.png)
[英]How can I scrape text within paragraph tag with some other tags then within the paragraph text?
[英]How to extract text content from all '<t>' tags within paragraph tag using xpath
<p> <pPr> <pStyle val="Table"/> <rPr> <szCs val="20"/> <rPr> </pPr> <r> <t>Reproductive toxicity</t> </r> <r> <rPr> <szCs val="20"/> </rPr> <t>/pregnancy</t> </r> </p>
我有以下 xml 代码,我需要解析表格中的所有此类 p 标签并使用 lxml python 库中的 XPath 获取其中的文本内容。 我写了以下 XPath,它转到表->第一行->最后一列->然后是我在 html 代码片段中添加的 p 标签):
'//tbl/tr[1]/tc[last()]/p/r/t/text()'
但这将给出一个列表,其中包含 t 标签中的两个字符串作为不同的列表项: ['reproductive toxicity', '/pregnancy']
我需要 output 作为一个字符串: ['reproductive toxicity/pregnancy']
谁能建议如何为此编写 XPath ?
这在 XPath 2.0+ 中很容易(在 Saxon/C 产品中可供 Python 用户使用):例如
string-join(//tbl/tr[1]/tc[last()]/p//t, '')
在XPath 1.0中不能直接做; 您必须检索<t>
元素集,然后在宿主语言中连接它们的值。
对于 XPath 问题,请始终说出您使用的是哪个版本,因为它通常会影响答案。
由于问题被标记为“lxml”,并且您指出可能有多个p
标签具有相似的信息,请在此修改后的带有两个p
标签的 xml 上尝试以下操作,让我们看看这是否是您要查找的内容:
repro = """
<doc>
<p>
<pPr>
<pStyle val="Table"/>
<rPr>
<szCs val="20"/>
</rPr>
</pPr>
<r>
<t>Reproductive toxicity</t>
</r>
<r>
<rPr>
<szCs val="20"/>
</rPr>
<t>/pregnancy</t>
</r>
</p>
<p>
<pPr>
<pStyle val="Table"/>
<rPr>
<szCs val="20"/>
</rPr>
</pPr>
<r>
<t>Some other toxicity</t>
</r>
<r>
<rPr>
<szCs val="20"/>
</rPr>
<t>/birth</t>
</r>
</p>
</doc>
"""
from lxml import etree
doc = etree.fromstring(repro)
targets = doc.xpath('//p')
lsts = []
for target in targets:
for t in target:
txt = target.xpath('.//t/text()')
lsts.append(txt)
for l in lsts:
print(' '.join(l))
Output:
Reproductive toxicity /pregnancy
Some other toxicity /birth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.