我使用Asp.net制作了一个网络抓取工具。它运作良好。问题是当我想从中提取内容时。一些内容在HTML标记之间进行换行。我有一些从中提取内容的解决方案,但我不知道哪个更好。它应该是良好的性能并且易于实现。
使用具有多种模式的Regex来取代内容。
使用Linq to XML来提取内容。
使用XPath提取内容。
有人请帮助我选择更好的解决方案。我想我会选择XPath,但我不确定性能是否优于RegEx或Linq2XML。
非常感谢任何想法。
答案 0 :(得分:4)
您的解决方案都不是特别好。
相反,您应该使用像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)。