简介
本文介绍net处理html页面元素的工具类(HtmlAgilityPack.dll)的使用,用途比较多的应该是例如采集类的功能,采集到的html字符串要怎样处理是一个头痛的问题,如果是截取就太麻烦了而且容易出错。所有就用到本文的第三方dll来处理了。
下载
下载地址:http://htmlagilitypack.codeplex.com/
点击“download”按钮直接下载。
使用
1.添加HtmlAgilityPack.dll引用(引用类using HtmlAgilityPack;)。
2.简单根据html中input的id获取value代码如下:
// 模拟用户请求 WebClient webClient = new WebClient(); webClient.Encoding = System.Text.Encoding.UTF8; string htmlContext = webClient.DownloadString("http://stone_w.cnblogs.com/"); webClient.Credentials = CredentialCache.DefaultCredentials; // 添加授权证书 webClient.Headers.Add("User-Agent", "Microsoft Internet Explorer"); webClient.Headers.Add("Host", "www.cnblogs.com"); // 获取html元素(htmlContext为html页面字符串) HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlContext); // 加载html页面 HtmlNode navNode = htmlDoc.GetElementbyId("id名称"); Response.Write(navNode.Attributes["value"].Value);
总结
HtmlAgilityPack可以根据id查询value,还可以获取单个元素节点,都是HtmlDocument类的内置方法,大家可以试着练练。谢谢完~
获取超级链接
HtmlWeb webClient = new HtmlWeb(); HtmlDocument doc = webClient.Load("http://xxx"); HtmlNodeCollection hrefList = doc.DocumentNode.SelectNodes(".//a[@href]"); if (hrefList != null) { foreach (HtmlNode href in hrefList) { HtmlAttribute att = href.Attributes["href"]; doSomething(att.Value); } }
搜集到的第三个
这里推荐一个不错的DLL
叫HtmlAgilityPack.dll,它不基于mshtml,轻松解析HTML代码,这对做采集软件来说是很不错的选择,使用非常简单:
--------------------------------------------------------------------------------
Dim wc As WebClient = New
WebClient
Dim ms As MemoryStream = New
MemoryStream(wc.DownloadData(url))
‘预读HTML
Dim hdoc As HtmlDocument = New
HtmlDocument
hdoc.Load(ms,
Encoding.UTF8)
‘股票编号
arr(0) =
hdoc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[1]/div[1]/div[3]/div[2]/div[1]/div[1]").InnerText
--------------------------------------------------------------------------------
其中
/html[1]/body[1]/div[1]/div[1]/div[3]/div[2]/div[1]/div[1]
是你要采集的xPath,这个有点像DOMhtml,HtmlAgilityPack
也提供了相应的工具软件来获取这个值,但似乎开发者似乎不怎么了解winform,软件容易崩溃...