有没有比lxml更好的解析html表格的方法

问题描述:

我正在处理html文档,并且翻出表格解析它们,如果它们变成正确的表格。我对结果感到满意 - 我的提取过程成功地将行标签和列标题映射到95%以上的案例中,并且在我们无法识别问题并使用其他方法的情况下。有没有比lxml更好的解析html表格的方法

在我对iternet的扫描中,我发现浏览器有一个非常强大的'引擎'来正确显示htm页面的内容,即使底层htm不正常。我们在解析表格时遇到的问题与不能从数据行中分离标题或者能够将行标签与一个或多个相邻数据值分开,然后不能正确解析出相邻数据值。 (我们可能有两个数据值被映射到一个列标题而不是两个相邻的列标题,也就是说如果我有一个标题为apple的列标题,然后一个标记为香蕉,我可能会将值分配给香蕉的值为'1125 12345' (或苹果)列标题的输出,而不必指定分配给香蕉苹果和12345值1125。

正如我在开始 - 说我们拿到的时候是正确的95%,我们可以在告诉输出的时候出现问题我开始认为我们已经尽可能地使用逻辑和html推理来清理这些,所以我开始怀疑我是否需要一个新的方法

Is there一种利用浏览器的'引擎'来帮助解析器的方法。最终如果浏览器可以正确显示列和行,以便它们在屏幕上正确显示,然后有一些技术即使在行和列跨度不一致的情况下也能处理(例如)。

感谢您的任何意见

+0

您目前使用什么方法“翻录”表格? – 2010-03-06 21:45:44

+0

许多方法基本上都是加载所有表格,然后在某些条件下测试单元格的内容。我这样做是因为我发现它更有可能在没有清理html的情况下处理表格而不是整个文档。 – PyNEwbie 2010-03-06 22:35:25

+0

参见http://stackoverflow.com/questions/126131/python-library-for-rendering-html-and-javascript – 2012-01-26 04:08:53

要“充分利用了浏览器的‘引擎’”,在这个时候你最好的赌注是毫无疑问的SeleniumRC - 但它的主要优点是在处理JavaScript的“一样,浏览器会”(也有一些其他的选项);对于一张简单逻辑上破坏的表格,虽然它在呈现时可能“看起来”确定,但浏览器(因此Selenium)可能与lxml或BeautifulSoup一样无助。不过,可能值得您尝试一下。

+0

@Alex谢谢,所以我必须继续为边缘案例开发逻辑 – PyNEwbie 2010-03-06 23:54:31

事实上,浏览器引擎是在他们的HTML解析故意愚蠢的,假设他们得到的是只能勉强正确的。 lxml和BeautifulSoup试图模仿这种愚蠢的程度,所以它们是使用正确的工具。