是的,WebClient可以很好地工作。根据您的要求,WebBrowser控件也可以工作。如果您要将文档加载到HtmlDocument(IE HTML DOM)中,那么使用Web浏览器控件可能更容易。
现在内置于.NET中的HtmlDocument对象可用于解析HTML。它旨在与WebBrowser控件一起使用,但也可以使用mshtml dll中的实现。我已经使用了HtmlAgilityPack,但我听说它可以做类似的工作。
HTML DOM对象通常会处理并修复最糟糕的HTML。除了允许更好的方法来解析html,document.GetElementsByTag以获取标记对象的集合。
至于处理网站变化的要求,这听起来像是一个很好的候选人strategy pattern。您可以使用反射或类似的东西来加载每个网站的策略。
我曾参与过一个系统,该系统使用XML来定义从HTML页面提取文本的一组通用参数。基本上它会定义开始和结束元素来开始和结束提取。我发现这种技术对于小样本来说足够好,但随着网站集合越来越大,它变得相当繁琐而且难以定制。保持XML是最新的,并试图保留一组通用的XML并为任何类型的站点处理代码都很困难。但是,如果网站的类型和数量很少,那么这可能会起作用。
最后要提的一件事是您可能想要为您的方法添加清洁步骤。清理HTML过程中的一种灵活方式对我过去编写的代码非常有用。如果您认为该域足够复杂以保证它的执行,那么实施pipeline类型的做法可能是一种好方法。但即使只是一个在解析它之前运行一些HTML正则表达式的方法也是很有价值的。摆脱图像,用更好的HTML替换特定的错误使用的标签等等。真正狡猾的HTML数量继续令我惊叹......
像管道的想法!谢谢 – Riri 2009-11-30 04:55:00
http://www.openpipeline.org/有一个开源的管道,适用于搜索引擎的文档处理。我还没有看过它,但它可能会给你一些想法。 要记住的另一件事是线程和可伸缩性。随着您网站的收藏增长,您将希望能够同时处理多个文档。 Windows Workflow Foundation(http://msdn.microsoft.com/en-us/netframework/aa663328.aspx)也可能能够形成你的“管道”。 – Glenn 2009-11-30 06:19:48