vb抓取网页内容( 一款处理网络数据的框架HtmlAgilityPack,(xml)(图) )

优采云 发布时间: 2022-03-22 23:07

  vb抓取网页内容(

一款处理网络数据的框架HtmlAgilityPack,(xml)(图)

)

  HtmlAgilityPack 网页数据处理

  发表于:2019/1/19 1:38

  HtmlAgilityPack 网络数据处理

  新的一年,新气象!祝大家新年快乐,万事如意,万事如意,身体健康!

  今天我说的是一个用于处理网络数据的框架HtmlAgilityPack,

  相信很多同事都因为处理网页数据和写正则表达式而一团糟。如果你使用这个框架,你会如鱼得水,释放你长久以来的复杂情绪!

  介绍:

  它是一个敏捷的 HTML 解析器,它构建一个读/写 DOM 并支持普通的 xpath 或 xslt(你实际上不需要了解 xpath 或 xslt 来使用它,不用担心......)。

  它是一个 .NET 代码库,可让您“离线”解析 HTML 文件。

  解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.xml 建议的非常相似,但用于 HTML 文档(或流)。

  原理:将抓取的网页转换为Dom文档模型(xml),然后进行元素搜索

  动手案例:

  (1)首先创建一个控制台项目learningHtmlAgilityPack

  

  (2)选择引用右键-->点击Manage NuGet Packages-->点击Browse-->Search HtmlAgilityPack

  从这里我们可以看到这里最新的稳定版本是v1.8.13 然后点击安装。

  

  (3)安装完成后我们以百度为例获取百度搜索按钮的值

  1、打开开发者工具获取百度搜索按钮的XPath路径,确认无误后进行下一步(注:Chome浏览器可以识别class、id等元素属性;Firefox会从 /head 开始查找)

  

  

  2. 通过简洁的代码实现目标

  using System.Net;

namespace learningHtmlAgilityPack

{

    class Program

    {

        static void Main(string[] args)

        {

            //实例化常规请求方式

            WebClient wc = new WebClient();

            //获取网页数据

            var vb = wc.DownloadData("https://www.baidu.com/");

            //转码

            var str = System.Text.Encoding.UTF8.GetString(vb);

            //实例化 HtmlAgilityPack 对象模型 

            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

            //加载文档对象模型

            doc.LoadHtml(str);

            //获取到百度按钮节点  把我们刚刚复制的XPath粘贴上去

            HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode("//*[@id='su']");

            //获取值 1,元素名称 2,当没有该元素时返回的内容

            string value = htmlnode.GetAttributeValue("value", "");

            System.Console.WriteLine(value);

            System.Console.ReadKey();

            

        }

    }

}

  运行结果:

  

  困难:

  (1),实现多个标签的集合(每个元素通过遍历得到)

  HtmlAgilityPack.HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[@id='addToCart']//div");

                        foreach (var item in collection)

                        {

                            if (!string.IsNullOrEmpty(item.GetAttributeValue("name", "")))

                            {

                               //想怎么干就怎么搞xxxxx

                            }

                        }

  (2),如果item下面有更多便签或者标签,还是这样写,但是获取第二层的时候不需要XPath//

  HtmlAgilityPack.HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[@id='addToCart']//div");

foreach (var item in collection)

                        {

                            if (!string.IsNullOrEmpty(item.GetAttributeValue("name", "")))

                            {

                                 //HtmlAgilityPack.HtmlNode htmlnode = item.SelectSingleNode("//*[@id='su']");

                                 HtmlAgilityPack.HtmlNodeCollection childs = item.SelectSingleNode("ul/li");

                                 foreach(var singeitem in childs)

                                 {

                                     //xxxx

                                 }

                            }

                        }

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线