如何使用HTML敏捷包
我如何使用HTML敏捷包 ?
我的XHTML文档不完全有效。 这就是为什么我想要使用它。 我如何在我的项目中使用它? 我的项目是在C#中。
-
下载并构buildHTMLAgilityPack解决scheme。
-
在您的应用程序中,在HTMLAgilityPack \ Debug(或Realease)\ bin文件夹中添加对HTMLAgilityPack.dll的引用。
然后,举个例子:
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); // There are various options, set as needed htmlDoc.OptionFixNestedTags=true; // filePath is a path to a file containing the html htmlDoc.Load(filePath); // Use: htmlDoc.LoadHtml(xmlString); to load from a string (was htmlDoc.LoadXML(xmlString) // ParseErrors is an ArrayList containing any errors from the Load statement if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0) { // Handle any parse errors as required } else { if (htmlDoc.DocumentNode != null) { HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body"); if (bodyNode != null) { // Do something with bodyNode } } }
(注意:这个代码只是一个例子,不一定是最好的/唯一的方法,不要在你自己的应用程序中盲目地使用它。)
HtmlDocument.Load()
方法也接受一个在.NET框架中与其他面向stream的类集成非常有用的stream。 而HtmlEntity.DeEntitize()
是正确处理html实体的另一个有用的方法。 (感谢马修)
HtmlDocument
和HtmlNode
是你最HtmlNode
的类。 与XMLparsing器类似,它提供了接受XPathexpression式的selectSingleNode和selectNodes方法。
注意HtmlDocument.Option??????
布尔属性。 这些控制着Load
和LoadXML
方法如何处理你的HTML / XHTML。
还有一个名为HtmlAgilityPack.chm的编译的帮助文件,它具有每个对象的完整参考。 这通常在解决scheme的基础文件夹中。
我不知道这对你是否有任何帮助,但是我写了几篇介绍基础知识的文章。
- HtmlAgilityPack文章系列
- HtmlAgilityPack图书馆简介
- 使用HtmlAgilityPack轻松地从html代码片段中提取链接
下一篇文章已经完成了95%,我只需要写下我写的代码的最后几部分的解释。 如果你有兴趣,那么我会尽量记住,当我发布它。
HtmlAgilityPack使用XPath语法,尽pipe很多人认为它的文档logging很糟糕,但在使用XPath文档的帮助下,我毫不费力地使用它: http://www.w3schools.com/xml/xpath_syntax.asp
parsing
<h2> <a href="">Jack</a> </h2> <ul> <li class="tel"> <a href="">81 75 53 60</a> </li> </ul> <h2> <a href="">Roy</a> </h2> <ul> <li class="tel"> <a href="">44 52 16 87</a> </li> </ul>
我做到了这一点:
string url = "http://website.com"; var Webget = new HtmlWeb(); var doc = Webget.Load(url); foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a")) { names.Add(node.ChildNodes[0].InnerHtml); } foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a")) { phones.Add(node.ChildNodes[0].InnerHtml); }
public string HtmlAgi(string url, string key) { var Webget = new HtmlWeb(); var doc = Webget.Load(url); HtmlNode ourNode = doc.DocumentNode.SelectSingleNode(string.Format("//meta[@name='{0}']", key)); if (ourNode != null) { return ourNode.GetAttributeValue("content", ""); } else { return "not fount"; } }
主要的HTMLAgilityPack相关代码如下
using System; using System.Net; using System.Web; using System.Web.Services; using System.Web.Script.Services; using System.Text.RegularExpressions; using HtmlAgilityPack; namespace GetMetaData { /// <summary> /// Summary description for MetaDataWebService /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. [System.Web.Script.Services.ScriptService] public class MetaDataWebService: System.Web.Services.WebService { [WebMethod] [ScriptMethod(UseHttpGet = false)] public MetaData GetMetaData(string url) { MetaData objMetaData = new MetaData(); //Get Title WebClient client = new WebClient(); string sourceUrl = client.DownloadString(url); objMetaData.PageTitle = Regex.Match(sourceUrl, @ "\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value; //Method to get Meta Tags objMetaData.MetaDescription = GetMetaDescription(url); return objMetaData; } private string GetMetaDescription(string url) { string description = string.Empty; //Get Meta Tags var webGet = new HtmlWeb(); var document = webGet.Load(url); var metaTags = document.DocumentNode.SelectNodes("//meta"); if (metaTags != null) { foreach(var tag in metaTags) { if (tag.Attributes["name"] != null && tag.Attributes["content"] != null && tag.Attributes["name"].Value.ToLower() == "description") { description = tag.Attributes["content"].Value; } } } else { description = string.Empty; } return description; } } }
入门 – HTML敏捷包
// From File var doc = new HtmlDocument(); doc.Load(filePath); // From String var doc = new HtmlDocument(); doc.LoadHtml(html); // From Web var url = "http://html-agility-pack.net/"; var web = new HtmlWeb(); var doc = web.Load(url);