HtmlAgilityPack
使用HtmlAgilityPack可以以面向对象的方式通过查找Html节点来获取页面元素。参考:http://html-agility-pack.net
HtmlDocument类
//方法
LoadHtml(string content);
//加载Html数据
CreateNode(string html)
//创建一个HtmlNode
CreateAttribute(string attriName, string attriVal)
//创建一个属性
CreateTextNode(string text)
//创建文本
//其它参考:http://html-agility-pack.net/utilities和http://html-agility-pack.net/writer
//属性
DocumentNode
//得到根节点,返回一个HtmlNode
LoadHtml(string content);
//加载Html数据
CreateNode(string html)
//创建一个HtmlNode
CreateAttribute(string attriName, string attriVal)
//创建一个属性
CreateTextNode(string text)
//创建文本
//其它参考:http://html-agility-pack.net/utilities和http://html-agility-pack.net/writer
//属性
DocumentNode
//得到根节点,返回一个HtmlNode
HtmlNode类
//方法
SelectNodes(string xPath)
//获取xPath指定的节点集合
SelectSingleNode(string xPath)
//获取xPath指定的节点集合中的第一个节点
SetAttributeValue(HtmlAttribute attri | string attriName, string attriVal)
//修改当前节点的属性
PrependChild(HtmlNode node)
//在当前节点中的开始处插入新的子节点
AppendChild(HtmlNode node)
//在当前节点中的末尾处插入新的子节点
PrependChildren(HtmlNode node)
//在当前节点中的开始处的子节点的开始处插入后代节点
AppendChildren(HtmlNode node)
//在当前节点中的末尾处的子节点的末尾处插入后代节点
InsertAfter(HtmlNode node)
//在当前节点后面插入新节点,类似的有insertBefore
Remove()
//移除自身
RemoveAll()
//移除自身包含的所有节点
RemoveAllChildren()
//移除自身包含的所有节点
RemoveChild(HtmlNode oldChild | HtmlNode oldChild, bool keepGrandChildren)
//keepGrandChildren:是否深度移除后代节点
//移除自身包含的由参数指定的节点
ReplaceChild(HtmlNode newChild, HtmlNode oldChild);
//在当前节点中,用newChild替换oldChild
Clone()
//创建副本
CloneNode(bool deep | string name | string name, bool deep)
//deep:是否深度克隆,如果是false,则只克隆节点自身
//name:克隆的同时修改节点的标签名称,比如克隆H1的内容同时改掉结果节点的名称为H2
CopyFrom(HtmlNode node | HtmlNode node, bool deep)
//deep:是否深度拷贝,如果是false,则只拷贝节点自身
//从参数指定的节点处复制其包含的所有节点
Element()
//在当前节点中根据参数指定的名称获取一个子节点,返回单个HtmlNode
Elements()
//在当前节点中根据参数指定的名称获取子节点集合,返回IEnumerable<HtmlNode>集合
Ancestors(string name)
//获取当前节点的由参数指定的名称的祖先节点,如果参数为空则获取当前节点的所有祖先节点的集合,类似的有AncestorsAndSelf()、AncestorsAndSelf(string name)
Descendants(string name)
//获取当前节点的由参数指定的名称的后代节点,如果参数为空则获取当前节点的所有后代节点的集合,类似的有DescendantsAndSelf()、DescendantsAndSelf(string name)
DescendantNodes()
//获取所有后代节点,类似的有DescendantNodesAndSelf()
//属性
InnerHtml
//设置或获取当前节点所包含的元素节点
InnerText
//设置或获取当前节点所包含的文本
OuterHtml
//获取当前节点所包含的所有代码
ParentNode
//获取当前节点的父节点
ChildNodes
//获取所有子节点,类似的有FirstChild、LastChild、NextSibling、ParentNode
SelectNodes(string xPath)
//获取xPath指定的节点集合
SelectSingleNode(string xPath)
//获取xPath指定的节点集合中的第一个节点
SetAttributeValue(HtmlAttribute attri | string attriName, string attriVal)
//修改当前节点的属性
PrependChild(HtmlNode node)
//在当前节点中的开始处插入新的子节点
AppendChild(HtmlNode node)
//在当前节点中的末尾处插入新的子节点
PrependChildren(HtmlNode node)
//在当前节点中的开始处的子节点的开始处插入后代节点
AppendChildren(HtmlNode node)
//在当前节点中的末尾处的子节点的末尾处插入后代节点
InsertAfter(HtmlNode node)
//在当前节点后面插入新节点,类似的有insertBefore
Remove()
//移除自身
RemoveAll()
//移除自身包含的所有节点
RemoveAllChildren()
//移除自身包含的所有节点
RemoveChild(HtmlNode oldChild | HtmlNode oldChild, bool keepGrandChildren)
//keepGrandChildren:是否深度移除后代节点
//移除自身包含的由参数指定的节点
ReplaceChild(HtmlNode newChild, HtmlNode oldChild);
//在当前节点中,用newChild替换oldChild
Clone()
//创建副本
CloneNode(bool deep | string name | string name, bool deep)
//deep:是否深度克隆,如果是false,则只克隆节点自身
//name:克隆的同时修改节点的标签名称,比如克隆H1的内容同时改掉结果节点的名称为H2
CopyFrom(HtmlNode node | HtmlNode node, bool deep)
//deep:是否深度拷贝,如果是false,则只拷贝节点自身
//从参数指定的节点处复制其包含的所有节点
Element()
//在当前节点中根据参数指定的名称获取一个子节点,返回单个HtmlNode
Elements()
//在当前节点中根据参数指定的名称获取子节点集合,返回IEnumerable<HtmlNode>集合
Ancestors(string name)
//获取当前节点的由参数指定的名称的祖先节点,如果参数为空则获取当前节点的所有祖先节点的集合,类似的有AncestorsAndSelf()、AncestorsAndSelf(string name)
Descendants(string name)
//获取当前节点的由参数指定的名称的后代节点,如果参数为空则获取当前节点的所有后代节点的集合,类似的有DescendantsAndSelf()、DescendantsAndSelf(string name)
DescendantNodes()
//获取所有后代节点,类似的有DescendantNodesAndSelf()
//属性
InnerHtml
//设置或获取当前节点所包含的元素节点
InnerText
//设置或获取当前节点所包含的文本
OuterHtml
//获取当前节点所包含的所有代码
ParentNode
//获取当前节点的父节点
ChildNodes
//获取所有子节点,类似的有FirstChild、LastChild、NextSibling、ParentNode
HtmlAttribute类
//方法
Add(HtmlAttribute attri | string attriName, string attriVal)
//添加一个属性,类似的有Append()
Remove(string attriName)
//此方法需要属性集合调用,移除节点的由参数指定的属性,如果参数为空则移除所有属性,类似的有RemoveAll()、RemoveAt(int index)
Add(HtmlAttribute attri | string attriName, string attriVal)
//添加一个属性,类似的有Append()
Remove(string attriName)
//此方法需要属性集合调用,移除节点的由参数指定的属性,如果参数为空则移除所有属性,类似的有RemoveAll()、RemoveAt(int index)
例子:
private void Test()
{
HtmlDocument doc = new HtmlDocument();
//三种方式创建Html对象
//第一种:
//System.IO.StreamReader reader = System.IO.File.OpenText(url);
//doc.Load(reader);
//第二种:
//doc.LoadHtml(url); 如果使用Load(url)会出现提示文档包含非法字符
//第三种:
//string htmlText = "<div>xxx</div>";
//doc.LoadHtml(htmlText);
string url = "http://www.weather.com.cn/weathern/101040100.shtml";
WebClient wc = new WebClient();
wc.Encoding = Encoding.GetEncoding("utf-8");
string content = wc.DownloadString(url);
doc.LoadHtml(content);
HtmlNode root = doc.DocumentNode; //得到根节点
var div= root.SelectNodes("//div").Where(d => d.InnerText.Contains("sam")).SingleOrDefault();
}
{
HtmlDocument doc = new HtmlDocument();
//三种方式创建Html对象
//第一种:
//System.IO.StreamReader reader = System.IO.File.OpenText(url);
//doc.Load(reader);
//第二种:
//doc.LoadHtml(url); 如果使用Load(url)会出现提示文档包含非法字符
//第三种:
//string htmlText = "<div>xxx</div>";
//doc.LoadHtml(htmlText);
string url = "http://www.weather.com.cn/weathern/101040100.shtml";
WebClient wc = new WebClient();
wc.Encoding = Encoding.GetEncoding("utf-8");
string content = wc.DownloadString(url);
doc.LoadHtml(content);
HtmlNode root = doc.DocumentNode; //得到根节点
var div= root.SelectNodes("//div").Where(d => d.InnerText.Contains("sam")).SingleOrDefault();
}