- //需要引入的声明
- using CefSharp;
- using CefSharp.WinForms;
- using System.Xml;
- using System.Xml.XPath;
- using HtmlAgilityPack;
可以使用webBrowser或CefSharp获取网络数据。浏览器实例化后可以选择是否在前台显示。获取的HTML将以字符串形式存储。
其中,CefSharp的初始化代码如下:
- public ChromiumWebBrowser ThisWeb; //浏览器对象
-
- public void InitializeChromium()
- {
- CefSettings settings = new CefSettings();
- Cef.Initialize(settings);
- ThisWeb = new ChromiumWebBrowser("www.baidu.com"); //打开
- ThisWeb.LifeSpanHandler = new OpenPageSelf();//禁止外部打开
-
- this.panelWeb.Controls.Add(ThisWeb); //绑定前台控件,可不绑定
- }
ThisWeb.Load(txtUrl.Text); //数据访问
string task1 = await ThisWeb.GetSourceAsync(); //获取HTML内容
在获取HTML内容后,使用HtmlAgilityPack,将string型转换为HTML对象。
- HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); //HTML对象
- doc.LoadHtml(task1);//将字符串转换成 HtmlDocument
- doc.LoadHtml(task1);//加载HTML
- HtmlAgilityPack.HtmlNodeCollection elem = doc.DocumentNode.SelectNodes(XPath公式);
Ps.使用SelectNodes仅能获取到结点,并不能使用其中的数据。若需选择结点中的元素,则需遍历elem集合后使用GetAttributeValue进行获取。
- foreach (var item in elem)
- {
- if (txtElem.Text != "")
- item.GetAttributeValue(txtElem.Text, "Null"); //参数:元素名,未找到的输出
- else
- item.OuterHtml.ToString(); //获取具体内容
- }
在Chrome中安装:XPath Helper。可以在浏览器中调出进行语句调试

按照元素逻辑层级编写XPath语句。XPath的规则如下:
| 符号 | 说明 | 示例 | 示例说明 |
| / | 表示从根节点开始选择 | /pets | 选择根节点pets |
| 表示节点和子节点之间的间隔符 | /pets/dog | 选择pets节点下的dog节点 | |
| //xx | 表示从整个xml文档中查找,而不考虑当前节点位置 | //price | 选择文档中所有的price节点 |
| . | 单个英文半角句点表示选择当前节点 | /pets/. | 选择pets节点 |
| .. | 双点,表示选择父节点 | /pets/dog[0]/.. | 表示pets节点,也就是第一个dog节点的父节点 |
| @xx | 表示选择属性 | //dog/@color | 表示选择所有dog节点的color属性集合 |
| […] | 中括号表示选择条件,括号内为条件 | //dog[@color=’white’] | 所有color为white的dog节点 |
| //dog[/price<100] | 所有price字节点值小于100的dog节点 | ||
| 中括号内数字为节点索引,类似c#等语言中的数组,数组下标是从1开始的 | //dog[1] | 第1个dog节点 | |
| //dog[last()] | 最后一个dog节点,last()是xPath内置函数 | ||
| | | 单竖杠表示合并节点结合 | //dog[@color=’white’] | //cat[@color=’white’] | color属性为white的dog节点和color属性为white的cat节点 |
| * | 星号表示任何名字的节点或者属性 | //dog/* | 表示dog节点的所有子节点 |
| //dog/@* | 表示dog节点的所有属性节点 |
效果如下: