【发布时间】:2014-11-01 15:25:02
【问题描述】:
我正在使用 BeautifulSoup 包解析数百个 HTML 文档。我的代码能够很好地解析整个文档。
我想根据条件删除所有表格标签的内容。由于很少有表格(根据 HTML 标记)实际上可能不是表格,而是表格内呈现的文本。如果表格的内容中超过 75% 的字符为数字,我想把它当作实际的表格并删除它,否则我想保留它。
我是 Python 新手,不确定如何仅删除特定表的全部内容。
假设我的 HTML 文档是:
<document>
<table>
100
</table>
<text>
Hello Word
</text>
<table>
Test
</table>
</document>
以下代码将生成整个 HTML 文档的内容,即
100
Hello Word
Test
我想要的是:
Hello Word
Test
请注意,代码还包含一个用于检查文本是否有用的函数。我分别计算字母和数字字符,因为可能有很多空格和其他乱码。
请帮助我删除无用的表格,即包含超过 75% 的数字字符。另请注意,表不必是文档的直接子级。
from bs4 import BeautifulSoup
import html5lib
def isTableUseful(text): #Returns True if table is to be included
try:
countAlpha = 0
countNumeric = 0
for char in text:
if char.isalpha():
countAlpha += 1
if char.isnumeric():
countNumeric += 1
FracNumeric = countNumeric/(countNumeric+countAlpha)
return FracNumeric < 0.75
except:
return False
soup = BeautifulSoup("<document><table>100</table><text>Hello Word</text><table>Test</table></document>", "html5lib")
print ('\n'.join([e.encode("utf-8") for e in soup.recursiveChildGenerator() if isinstance(e,unicode) and e.strip()!=""]))
【问题讨论】:
标签: python xml beautifulsoup