代码之家  ›  专栏  ›  技术社区  ›  ivo

如何解析格式不良的HTML文件?

  •  5
  • ivo  · 技术社区  · 15 年前

    到目前为止,我能想到的最佳策略是为每种页面定义一个模板,如:

    模板A:

    <html>
    ...
      <tr><td>Table column that is missing a td 
          <td> Another table column</td></tr>
      <tr><td>$data_item_1$</td>
    ...
    </html>
    

    模板B:

    <html>
    ...
      <ul><li>Yet another poorly formatted page <li>$data_item_1$</td></tr>
    ...
    </html>
    

    $data_item_1$ , $data_item_2$

    谢谢

    6 回复  |  直到 15 年前
        1
  •  8
  •   Geo    15 年前

    您可以通过tidy传递页面的源代码以获得有效页面。你可以找到整洁的 here . Tidy有许多编程语言的绑定。完成此操作后,可以使用您最喜欢的解析器/内容提取技术。

        2
  •  2
  •   Pat    15 年前

    我推荐 Html Agility Pack . 它能够处理结构不良的HTML,同时使用Xpath提供类似Xml的选择。您仍然需要为项目设置模板或使用不同的选择进行选择和分析,但这将帮助您克服糟糕的结构驼峰。

        3
  •  2
  •   Community kfsone    4 年前

    如上所述 here 在之前的其他问题上, Beautiful Soup 可以解析奇怪的HTML。

    Beauty Soup是一个Python HTML/XML解析器,专为屏幕抓取等快速周转项目而设计。三大功能使其功能强大:

    1. Beauty Soup提供了一些用于导航、搜索和修改解析树的简单方法和Python习惯用法:一个用于解析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
    2. Beauty Soup自动将传入文档转换为Unicode,将传出文档转换为UTF-8。您不必考虑编码,除非文档没有指定编码,并且Beauty Soup无法自动检测编码。然后您只需指定原始编码。

    美丽的汤解析你给它的任何东西,并为你做树遍历的事情。您可以告诉它“查找所有链接”,或“查找类externalLink的所有链接”,或“查找URL与“foo.com”匹配的所有链接”,或“查找包含粗体文本的表标题,然后给我该文本。”

        4
  •  1
  •   Kornel    15 年前

    使用HTML5解析器就像 html5lib .

    与HTMLTidy不同,这将使您的错误处理与浏览器的处理非常接近。

        5
  •  0
  •   Community kfsone    7 年前

    这上面有几个C#特定的线程,比如 Looking for C# HTML parser .

        6
  •  0
  •   Steve    15 年前

    我也有一个类似的问题,但在我的例子中,我只想从页面中获取一段特定的数据,这段数据很容易识别,而无需解析HTML,因此正则表达式工作得非常好。

    推荐文章