我可以根据对文档的分析将文档转换为文本之前在BeautifulSoup中对文档进行分段吗?

时间:2009-05-15 02:40:43

标签: python beautifulsoup

我有一些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>

然后有“经典表格”在表格正文中有数据。

我希望能够在表格中应用算法并设置一些规则,以确定在将文档转换为文本之前是否将表格删除。

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

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和&amp; 9.因此,html文档的部分包含除了那些表之外的所有内容。我该如何分割我的汤?

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

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

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

1 个答案:

答案 0 :(得分: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()

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