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

时间:2010-03-06 19:59:27

标签: python browser lxml

我正在处理html文档并删除表来解析它们,如果它们是正确的表。我对结果很满意 - 我的提取过程成功地在95%以上的情况下映射行标签和列标题,在这种情况下我们无法识别问题并使用其他方法。

在我扫描iternet时,我逐渐明白浏览器有一个非常强大的“引擎”来正确显示htm页面的内容,即使底层htm格式不正确。我们解析表时遇到的问题与诸如无法将标题与数据行分开或者能够将行标签与一个或多个相邻数据值分开然后无法正确解析出相邻数据值之类的问题有关。 。 (我们可能有两个数据值映射到一个列标题而不是两个相邻的列标题。也就是说,如果我有一个标题为apple的列标题,然后标记为banana,我可能将值'1125 12345'分配给香蕉输出中的(或苹果)列标题,而不是将值1125分配给apple,将12345分配给banana。

正如我在开始时所说的那样 - 我们在95%的时间内正确使用它,我们可以在出现问题时告诉输出。我开始认为我们已经尽可能地使用html中的逻辑和推论来清理它们,所以我开始怀疑我是否需要一种新的方法。

有没有办法利用浏览器的“引擎”来帮助解决这个问题。最终,如果浏览器可以正确显示列和行,以便它们在屏幕上正确显示,那么即使行和列跨度不一致(例如),也有一些技术可以处理。(/ p>

感谢您的任何观察

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

要“利用浏览器的'引擎'”,此时您最好的选择无疑是SeleniumRC - 但其主要优势在于处理 javascript “就像浏览器会“(其他选项很少);对于一个简单逻辑上破坏的表虽然在渲染时可能“看起来”正常,但浏览器(以及Selenium)可能与lxml或BeautifulSoup一样无助。不过,尝试一下也许值得你花时间。