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

2024-04-29 16:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些html文件,我想转换成文本。我玩过beauthoulsoup,在理解如何使用这些指令以及如何提交html和返回文本方面取得了一些进展。在

但是,我的文件中有很多文本是使用表结构格式化的。例如,我可能有一段文本驻留在一组table标记中的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>

还有一些“经典表”在表体中包含数据。在

我想在将文档转换为文本之前,能够对表应用一个算法并设置一些规则来确定表是否被取出。在

我已经找到了如何获取表的特征-例如,获取每个表中col的数量:

^{pr2}$

因此,我可以对numbCols进行操作,并使用列表中每个项的len和列表中每个项的值来分析表的特性,并确定要保留或放弃的表。在

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

我提出的解决方案是,首先使用finditer确定每个open和close表标记的位置,然后获取跨距,然后用numbCols压缩跨距。然后我可以用这个列表来剪断并连接我的琴弦。完成后,我可以使用beauthoulsoup将html转换为文本。在

我确信我能在美丽的团队里完成所有这些。任何建议或链接到现有的例子将是伟大的。我应该指出,我的源文件可能很大,我有数千个要处理。在

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


Tags: 文件文档标记文本列表informationishtml
1条回答
网友
1楼 · 发布于 2024-04-29 16:56:07

伙计,我喜欢这个东西 假设在一个简单的例子中,我想删除所有列长度大于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()

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

相关问题 更多 >