0

我有一些要转换为文本的 html 文件。我玩过 BeautifulSoup 并在理解如何使用说明以及可以提交 html 和取回文本方面取得了一些进展。

但是,我的文件有很多使用表格结构格式化的文本。例如,我可能有一段文本位于一组表标签中的 td 标签中

<table>
<td> here is some really useful information and there might be other markup tags but
     this information is really textual in my eyes-I want to preserve it
 </td>
</table>

然后是“经典表格”,表格主体中有数据。

我希望能够将算法应用于表格并设置一些规则来确定表格是否在我将文档转换为文本之前被撕掉。

我已经弄清楚如何获取我的表格的特征 - 例如获取每个表格中的列数:

numbCols=[]
for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
        rows.append(columns)
    numbCols.append(rows)

所以我可以对 numbCols 进行操作,并使用列表中每个项目的 len 和列表中每个项目的值来分析我的表的特征并确定我想要保留或丢弃的那些。

我没有看到将这些信息与 BeautifulSoup 一起使用来获取文本的优雅方式。我想我想要得到的是假设我分析 numbCols 并决定我想排除表 2、4、6 和 9 的特定文档中的十个表。所以 html 文档的部分包括除那些之外的所有内容表。我怎么能这样分割我的汤?

我想出的解决方案是首先使用 finditer 确定每个打开和关闭表标签的位置并获取跨度,然后使用 numbCols 压缩跨度。然后我可以使用这个列表将我的字符串片段剪断并连接在一起。完成后,我可以使用 BeautifulSoup 将 html 转换为文本。

我确信我应该能够在 BeautifulSoup 中完成所有这些工作。任何对现有示例的建议或链接都​​会很棒。我应该提一下,我的源文件可能很大,而且我要处理数千个文件。

没有答案,但我越来越近了

4

1 回答 1

0

伙计,我喜欢这个东西假设在一个天真的情况下,我想删除所有列长度大于 3 的行的所有表我的答案是

for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
            rows.append(columns)
        if max(rows)>3:
          table.delete()

您可以在该循环中的任何级别执行您想要的任何处理,只需要识别测试并获取正确的实例进行测试。

于 2009-05-16T05:00:33.917 回答