XPATH(同样)可选标记元素提取单个字符串

2024-06-28 18:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这些<TD>的列表,并使用列表理解来一次获得它们。 希望在两种情况下都提取文本“v11/4”,即有/无sup 必须提取到单个元素中(对于此行)。你知道吗

例1

<td>
<b class="black">2</b>/6 <a href="/some/link"onclick=
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS
11)</a>v 11/4</td>

例2

<td>
<b class="black">2</b>/6 <a href="/some/link"onclick=
"returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS
11)</a>v<sup>1</sup> 11/4</td>

有什么想法吗?你知道吗


Tags: 列表titlelinksomethisclasstdblack
1条回答
网友
1楼 · 发布于 2024-06-28 18:47:37

识别文本“v11/4”的一种可能的方法是将位于<a>'之后的所有直接子文本节点(属于<td>)串联起来。下面是使用lxml.html的示例实现:

>>> from lxml import html
>>> raw = '''<tr>
... <td>
... <b class="black">2</b>/6 <a href="/some/link" onclick=
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS
... 11)</a>v 11/4</td>
... <td>
... <b class="black">2</b>/6 <a href="/some/link" onclick=
... "returnHtml.popup(this," title="whateveryoulike">(ABL TTTTTSSSSSS
... 11)</a>v<sup>1</sup> 11/4</td>
... </tr>'''
... 
>>> root = html.fromstring(raw)
>>> result = [''.join(txt for txt in td.xpath("a/following-sibling::text()")).strip() \
...             for td in root.xpath("//td")]
... 
>>> result
['v 11/4', 'v 11/4']

相关问题 更多 >