美文网首页
Windform爬虫笔记

Windform爬虫笔记

作者: 树蜂 | 来源:发表于2018-12-28 13:53 被阅读0次

    1、webkit的使用
    2、HtmlAgilityPack的使用


    1、webkit的使用

    虽然可直接使用自带的webbrowser,但IE内核用着实在蛋疼,改用webkit内核。
    1)下载WebKit的项目bin,网址如下:https://sourceforge.net/projects/webkitdotnet/files/WebKit%20.NET%200.x/0.5/WebKit.NET-0.5-bin-cairo.zip/download

    2)下载解压后的目录结构如下:

    image

    3)将bin文件夹下的所有(没错!是所有文件复制),并粘贴到项目文件夹下,目标目录是:项目名/bin/Debug/

    image

    4)导入Webkitbrowser的dll到你的项目中。在VS2015的操作如下(其他的类推):
       在Solution Explorer下,选中你的项目名,然后右键,选择Add,然后选择Reference,如下图:

    image

    5)在弹出的对话框里。选择Browse -> Browse...,然后选择你的:项目名/bin/Debug下之前粘贴的WebKitBrowser.dll导入,结果如下图:

    image

    6)编码

    WebKit.WebKitBrowser browser
    private void Form1_Load(object sender, EventArgs e)
    {
      browser = new WebKitBrowser();
      browser.Dock = DockStyle.Fill;
      this.Controls.Add(browser);
      browser.Navigate("http://www.baidu.com");
      browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(go);
    }
    // 网页加载完成后执行该函数
    private void go(object sender, EventArgs e)
    {
      ...
    }
    public void login(string name)
    {
      WebKit.DOM.Document doc = browser.Document;
      // 往xxid的元素填入name
      WebKit.DOM.Element ele = doc.GetElementById("xxid");
      ele.SetAttribute("Value", name);
      // 调用函数名为funcName的脚本
      browser.Document.InvokeScriptMethod("funcName");
    }
    

    2、HtmlAgilityPack的使用

    1)安装
    离线下载地址

    https://www.nuget.org/packages/HtmlAgilityPack/1.8.11

    选择最新版本后点击 Download package 1.8.11 (1.2 MB)

    image.png

    可将下载后的后缀nupkg改为rar再解压,选择开发的.net版本下的HtmlAgilityPack.dll


    image.png

    再加入引用
    2)使用
    可通过string初始化

    string html = WebRequestPost(url);
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    

    通过加载文件初始化

    string path= @"D:\ABC.html";
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(path, Encoding.UTF8);
    

    其他XPath语法这里不做介绍
    注意:

    1、如果需要在获取的HtmlNode中进行操作,需要重新生成HtmlNode才能取到对应节点的信息,否则取到的一直都是第一个
    2、生成的HtmlNode下只能有1个根节点,尝试使用allDivs[i].InnerHtmlallDivs[i].OuterHtml

    HtmlNodeCollection allDivs = doc.DocumentNode.SelectNodes(xpathDiv);
    for (int i = 0; i < allDivs.Count; i++)
    {
      HtmlNode node = HtmlNode.CreateNode(allDivs[i].InnerHtml);
    }
    

    相关文章

      网友评论

          本文标题:Windform爬虫笔记

          本文链接:https://www.haomeiwen.com/subject/tyxslqtx.html