我使用 Asp.net 制作了一个网络爬虫。它运作良好。问题是当我想从中提取内容时。一些内容在 HTML 标记之间进行包装。我有一些解决方案可以从中提取内容,但我不知道哪个更好。它应该具有良好的性能并且易于实现。
使用具有多种模式的正则表达式来提取内容。
使用 Linq to XML 提取内容。
使用 XPath 提取内容。
有人请帮我选择更好的解决方案。我想我会选择 XPath,但我不确定性能是否优于 RegEx 或 Linq2XML。
非常感谢您的任何想法。
您的解决方案都不是特别好。
相反,您应该使用 HTML 解析库,例如Html Agility Pack。
两者都不。使用适当的 HTML 解析器,例如HTML Agility Pack
RegEx 无疑比 Linq to XML 和 XPath 方式都快。但是您不能使用 RegEx 解析 html 标记中的所有内容。Html 对于这个目的来说太复杂了。
虽然我没有设计自己的 Crawler,但我使用了arachnode.net,它会爬取大量数据。在任何地方我都使用Html Agility Pack来提取各种组件,即 Html 控件、Cookie、MetaTags 等。
正如其他人已经暗示的那样 - 使用正确的 HTML 解析器。在大多数情况下,HTML 编写得不够好,无法被视为 XML。更糟糕的是,HTML5 推动了完全不可解析的语法。例如,HTML5 允许您在属性周围省略引号。
除了 HTML Agility Pack,您还可以查看 Majestic-12 的 HTML Parser:Majestic-12 : Projects : C# HTML parser (.NET)。