当前位置:  开发笔记 > 编程语言 > 正文

C# - 解析网页的最佳方法?

如何解决《C#-解析网页的最佳方法?》经验,为你挑选了3个好方法。

我已经将整个网页的html保存为字符串,现在我想从链接中获取"href"值,最好能够将它们保存到不同的字符串中.最好的方法是什么?

我已经尝试将字符串保存为.xml文档并使用XPathDocument导航器解析它,但是(惊喜)它并没有很好地导航非真正的xml文档.

正则表达式是实现我想要实现的目标的最佳方式吗?



1> Jeff Donnici..:

我可以推荐HTML Agility Pack.我在一些需要解析HTML的情况下使用过它并且效果很好.将HTML加载到其中后,您可以使用XPath表达式查询文档并获取锚标记(以及其中的任何其他内容).

HtmlDocument yourDoc = // load your HTML;
int someCount = yourDoc.DocumentNode.SelectNodes("your_xpath").Count;



2> NotMe..:

正则表达式是一种方法,但它可能会有问题.

大多数HTML页面都无法使用标准的html技术进行解析,因为正如您所知,大多数HTML页面都没有验证.

您可以花时间尝试集成HTML Tidy或类似工具,但只需构建所需的正则表达式会快得多.

UPDATE

在此次更新时,我收到了15个up和9个downvotes.我想也许人们不是在阅读这个问题,也不是对这个答案的评论.OP想要做的就是获取href值. 而已. 从这个角度来看,一个简单的正则表达式就好了.如果作者想要解析其他项目,那么就像我在开始时所说的那样,我无法推荐正则表达式,这在最好的情况下是有问题的.


答案不好.不要这样做.
-1嗯,使用Regex解析HTML.什么可能出错?哦,这是正确的:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags
尝试使用RegEx解析所有标记是不是一个坏主意?是.但是,正则表达式构建为从字符串中获取所有href ="whatever"值.这是OP想要做的事情

3> Duncan..:

为了处理各种形状和大小的HTML,我更喜欢使用HTMLAgility包@ http://www.codeplex.com/htmlagilitypack,它允许您针对所需的节点编写XPath并在集合中获得返回.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有