从webcrawler中提取内容时哪些解决方案更快

时间:2013-05-02 14:05:32

标签: c# asp.net

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

  1. 使用具有多种模式的Regex来取代内容。

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

  3. 使用XPath提取内容。

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

    非常感谢任何想法。

4 个答案:

答案 0 :(得分:4)

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

  1. HTML不是常规语言,因此不适合正则表达式。另请参阅使用正则表达式解析HTML的standard response
  2. HTML不一定是有效的XML
  3. 相反,您应该使用像Html Agility Pack这样的HTML解析库。

答案 1 :(得分:3)

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

答案 2 :(得分:3)

RegEx无疑比Linq更快和XML和XPath方式更快。但是你无法使用RegEx解析html标记之外的所有内容。 Html太复杂了。

我没有设计自己的Crawler,我使用了arachnode.net,它抓取了大量的数据。在任何地方我都使用Html Agility Pack来提取各种组件,例如Html控件,Cookie,MetaTag等等。

答案 3 :(得分:3)

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

与HTML Agility Pack一起,您可以查看Majestic-12的HTML Parser:Majestic-12 : Projects : C# HTML parser (.NET)