BeautifulSoup:如何去除空表格,同时保留部分空或不空的表格
我有一个旧网站,最开始是用MS Frontpage制作的,现在我想把它从Frontpage的格式中解放出来。我写了一个BeautifulSoup的脚本,基本上完成了大部分工作。现在剩下的就是要删除那些空的表格,也就是那些在td
标签里没有任何文本内容或数据的表格。
我现在遇到的问题是,我之前尝试的方法会删除只要有一个td
标签没有数据的表格,即使其他的标签里有数据。这导致整个文档里的所有表格都被删除了,包括那些我想保留的数据表格。
tags = soup.findAll('table',text=None,recursive=True)
[tag.extract() for tag in tags]
有没有什么建议,可以让我只删除那些所有的td
标签里都没有数据的表格?(我不在乎它们是否包含img
标签或空的链接标签,只要里面没有文本就行)。
1 个回答
4
使用 .text
属性。这个属性可以获取到那个元素里面的所有文本内容,包括里面的所有子元素的文本。
举个例子:
from BeautifulSoup import BeautifulSoup as BS
html = """
<table id="empty">
<tr><td></td></tr>
</table>
<table id="with_text">
<tr><td>hey!</td></tr>
</table>
<table id="with_text_in_one_row">
<tr><td></td></tr>
<tr><td>hey!</td></tr>
</table>
<table id="no_text_but_img">
<tr><td><img></td></tr>
</table>
<table id="no_text_but_a">
<tr><td><a></a></td></tr>
</table>
<table id="text_in_a">
<tr><td><a>hey!</a></td></tr>
</table>
"""
soup = BS(html)
for table in soup.findAll("table" ,text=None,recursive=True):
if table.text:
print table["id"]
输出结果:
with_text
with_text_in_one_row
text_in_a