基于CefSharp和XPath的C#爬虫

//需要引入的声明
using CefSharp;
using CefSharp.WinForms;
using System.Xml;
using System.Xml.XPath;
using HtmlAgilityPack;

一、获取HTML数据

        可以使用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

三、使用XPath进行解析

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();    //获取具体内容
}

四、关于XPath

        1.Chrome插件

                在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节点的所有属性节点

 效果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值