【问题标题】:Is there a better way to parse html tables than lxml有没有比 lxml 更好的方法来解析 html 表
【发布时间】:2011-01-24 12:49:45
【问题描述】:

我正在处理 html 文档,如果结果是正确的表格,我会提取表格来解析它们。我对结果感到满意——我的提取过程在超过 95% 的情况下成功地映射了行标签和列标题,在没有成功的情况下,我们可以识别问题并使用其他方法。

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

正如我在开始时所说的那样——我们 95% 的时间都做对了,我们可以在输出中判断何时出现问题。我开始认为我们已经尽可能地使用 html 中的逻辑和推理来清理这些,所以我开始怀疑我是否需要一种新方法。

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

感谢您的意见

【问题讨论】:

  • 您目前使用什么方法来“撕掉”表格?
  • 许多方法基本上我正在加载所有表格,然后在某些条件下测试单元格的内容。我这样做是因为我发现与整个文档相比,在不清理 html 的情况下处理表格的可能性更大。

标签: python browser lxml


【解决方案1】:

要“利用浏览器的‘引擎’”,此时最好的选择无疑是SeleniumRC——但它的主要优势在于处理 javascript“就像浏览器一样"(对此几乎没有其他选择);对于一个在逻辑上被简单破坏的表,尽管它在渲染时可能“看起来”正常,浏览器(以及因此 Selenium)可能与 lxml 或 BeautifulSoup 一样无助。不过,可能值得您尝试一下。

【讨论】:

  • @Alex 谢谢,所以我必须继续为边缘案例开发逻辑
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 2011-07-20
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多