我得分析一系列网页,以便进口到数据的应用程序。每个类型的网页提供了同样的数据。问题是,HTML的每一页都是不同的,所以数据的位置的不同而不同。另一个问题是HTML码不佳的格式化,使得无法使用一个类似XML parser.

迄今为止,最好的战略我可以想到的,是确定一个模板,用于各种网页,如:

模板:

<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$, 等等。然而,这将是一个有很多工作。你能想到的任何简单的解决方案吗?任何库,可以帮助?

感谢

有帮助吗?

解决方案

您可以通过整齐通过页面的源得到有效的页面。你可以找到整洁这里 。整齐有很多编程语言的绑定。你这样做后,您可以使用自己喜欢的解析器/内容提取技术。

其他提示

我建议你的Html敏捷包。它与结构不佳的HTML工作,而使用XPath给你的Xml喜欢选择的能力。你仍然要模板项目或选择使用不同的选择和分析,但它可以把你过去的结构驼峰差。

如前所 在这里, 和其他所以答案之前, 美丽的汤 可以分析奇怪HTML。

美丽的汤是蟒蛇HTML/XML parser设计用于快速转变的项目,如屏幕上-刮。三个功能,使之强大的:

  1. 美丽的汤不会扼如果你把它糟糕的标记。它产生一个分析树,使得大约尽可能多的意义,因为你的原始文件。这通常是良好的足够收集所需的数据和逃跑。
  2. 美丽的汤提供了一些简单的方法和功能已大大增强成语,用于导航、搜索和修改分析树:一个工具包,为解剖的文件和提取你需要什么。你不需要创建一个自定义的分析器,每个应用程序。
  3. 美丽的汤自动转换收到的文件,以Unicode和发出的文件UTF-8。你不认为有关的编码,除非该文件未指定编码和美丽的汤不能自动检测的一个。然后你只需要指定原来的编码。

美丽的汤分析任何东西你给它,并且树穿越东西给你。你可以告诉它"找到所有的联系",或者"找到的所有链接的类externalLink",或者"找到的所有链接的网址比赛"foo.com",或者"找到的表格标题,得到了大胆的文本,然后给我这个文本"。

使用HTML5解析器如 html5lib

与HTML整齐,这会给你错误处理非常接近什么浏览器做的。

有对这个几个C#特定主题,如寻找C#HTML解析器

根据你需要提取的正则表达式可能是一种选择什么样的数据。我知道很多人会在使用上的结构化数据,但显而易见的事实是正则表达式(如你发现),很多HTML的实际上不是结构良好,可以是非常难以解析的思想不寒而栗。

我也有类似的问题给你,但对我来说,我只想要一个具体的一条从页面这是很容易识别,而不解析HTML数据,所以一个正则表达式的工作非常好听。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top