如何从 <br/> 标签后的单元格中获取文本?
How to get the text from a cell after <br/> tag?
我正在浏览一个简单但很长的 HTML 块,它类似于:
<table>
<tbody>
<tr>
<td> Some text </td>
<td> Some text </td>
</tr>
<tr>
<td> Some text
<br/>
Some more text
</td>
</tr>
</tbody>
</table>
我正在使用以下 python 代码(使用 lxml)收集数据:
for element in root.iter():
if element == 'td':
print element.text
有些文本分为两行,但大部分都放在一行中。问题出在分割行内。
根元素是 'table' 标签。那个小代码可以打印出所有其他文本,但不能打印出 'br' 标签后面的内容。如果我不排除非 td 标签,代码会尝试从 'br' 标签内打印可能的文本,但当然那里什么也没有,因此只打印空的新行。
然而,在此 'br' 之后,代码在迭代中移动到行中的下一个标记,但忽略仍在前一个 'td' 标记内的数据。
我怎样才能同时获得这些标签后的数据?
编辑:似乎有些 'br' 标签是自动关闭的,但有些是打开的
<td>
Some text
<br>
Some more text
</td>
第一个答案中建议的element.tail方法似乎无法获取打开标签后的数据。
Edit2:实际上它有效。是我自己的错误。忘了说 "print element.text" 部分被 try-except 封装了,如果 br 标签捕获了一个 AttributeError,因为 br 标签里面什么都没有。我已将异常设置为仅通过并且不打印任何内容。在同一个 try-except 中,我也尝试打印出尾部,但是由于之前发生的异常,从未打印出尾部。
因为<br/>
是一个自闭标签,所以没有任何text
内容。相反,您需要访问它的 tail
内容。 tail
内容是元素结束标记之后、下一个开始标记之前的内容。要在 for 循环中访问此内容,您需要使用以下内容:
for element in root.iter():
element_text = element.text
element_tail = element.tail
即使 br
标签是开始标签,此方法仍然有效:
from lxml import etree
content = '''
<table>
<tbody>
<tr>
<td> Some text </td>
<td> Some text </td>
</tr>
<tr>
<td> Some text
<br>
Some more text
</td>
</tr>
</tbody>
</table>
'''
root = etree.HTML(content)
for element in root.iter():
print(element.tail)
输出
Some more text
下面对我来说正在努力提取 br
-
之后的所有文本
normalize-space(//table//br/following::text()[1])
工作示例是 at。
我正在浏览一个简单但很长的 HTML 块,它类似于:
<table>
<tbody>
<tr>
<td> Some text </td>
<td> Some text </td>
</tr>
<tr>
<td> Some text
<br/>
Some more text
</td>
</tr>
</tbody>
</table>
我正在使用以下 python 代码(使用 lxml)收集数据:
for element in root.iter():
if element == 'td':
print element.text
有些文本分为两行,但大部分都放在一行中。问题出在分割行内。
根元素是 'table' 标签。那个小代码可以打印出所有其他文本,但不能打印出 'br' 标签后面的内容。如果我不排除非 td 标签,代码会尝试从 'br' 标签内打印可能的文本,但当然那里什么也没有,因此只打印空的新行。
然而,在此 'br' 之后,代码在迭代中移动到行中的下一个标记,但忽略仍在前一个 'td' 标记内的数据。
我怎样才能同时获得这些标签后的数据?
编辑:似乎有些 'br' 标签是自动关闭的,但有些是打开的
<td>
Some text
<br>
Some more text
</td>
第一个答案中建议的element.tail方法似乎无法获取打开标签后的数据。
Edit2:实际上它有效。是我自己的错误。忘了说 "print element.text" 部分被 try-except 封装了,如果 br 标签捕获了一个 AttributeError,因为 br 标签里面什么都没有。我已将异常设置为仅通过并且不打印任何内容。在同一个 try-except 中,我也尝试打印出尾部,但是由于之前发生的异常,从未打印出尾部。
因为<br/>
是一个自闭标签,所以没有任何text
内容。相反,您需要访问它的 tail
内容。 tail
内容是元素结束标记之后、下一个开始标记之前的内容。要在 for 循环中访问此内容,您需要使用以下内容:
for element in root.iter():
element_text = element.text
element_tail = element.tail
即使 br
标签是开始标签,此方法仍然有效:
from lxml import etree
content = '''
<table>
<tbody>
<tr>
<td> Some text </td>
<td> Some text </td>
</tr>
<tr>
<td> Some text
<br>
Some more text
</td>
</tr>
</tbody>
</table>
'''
root = etree.HTML(content)
for element in root.iter():
print(element.tail)
输出
Some more text
下面对我来说正在努力提取 br
-
normalize-space(//table//br/following::text()[1])
工作示例是 at。