【发布时间】:2016-01-21 17:50:15
【问题描述】:
我正在爬取一个简单但很长的 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 中,我尝试了也打印出尾部,但由于之前发生的异常,从未打印出尾部。
【问题讨论】:
标签: python html parsing xpath lxml