2

我使用 Asp.net 制作了一个网络爬虫。它运作良好。问题是当我想从中提取内容时。一些内容在 HTML 标记之间进行包装。我有一些解决方案可以从中提取内容,但我不知道哪个更好。它应该具有良好的性能并且易于实现。

  1. 使用具有多种模式的正则表达式来提取内容。

  2. 使用 Linq to XML 提取内容。

  3. 使用 XPath 提取内容。

有人请帮我选择更好的解决方案。我想我会选择 XPath,但我不确定性能是否优于 RegEx 或 Linq2XML。

非常感谢您的任何想法。

4

4 回答 4

4

您的解决方案都不是特别好。

  1. HTML 不是正则语言,因此不适合正则表达式。另请参阅使用正则表达式解析 HTML的标准响应。
  2. HTML 不一定是有效的 XML

相反,您应该使用 HTML 解析库,例如Html Agility Pack

于 2013-05-02T14:10:06.467 回答
3

两者都不。使用适当的 HTML 解析器,例如HTML Agility Pack

于 2013-05-02T14:09:45.970 回答
3

RegEx 无疑比 Linq to XML 和 XPath 方式都快。但是您不能使用 RegEx 解析 html 标记中的所有内容。Html 对于这个目的来说太复杂了。

虽然我没有设计自己的 Crawler,但我使用了arachnode.net,它会爬取大量数据。在任何地方我都使用Html Agility Pack来提取各种组件,即 Html 控件、Cookie、MetaTags 等。

于 2013-05-02T14:11:28.187 回答
3

正如其他人已经暗示的那样 - 使用正确的 HTML 解析器。在大多数情况下,HTML 编写得不够好,无法被视为 XML。更糟糕的是,HTML5 推动了完全不可解析的语法。例如,HTML5 允许您在属性周围省略引号。

除了 HTML Agility Pack,您还可以查看 Majestic-12 的 HTML Parser:Majestic-12 : Projects : C# HTML parser (.NET)

于 2013-05-02T14:14:02.830 回答