最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 爬蟲簡(jiǎn)單教程

 更新時(shí)間:2020年12月29日 14:37:48   作者:張缺缺  
這篇文章主要介紹了C# 爬蟲的簡(jiǎn)單教程,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

1、使用第三方類庫 HtmlAgilityPack

官方網(wǎng)址:https://html-agility-pack.net/?z=codeplex

// From File 從文件獲取html信息
var doc = new HtmlDocument();
doc.Load(filePath);

// From String 從字符串獲取html信息
var doc = new HtmlDocument();
doc.LoadHtml(html);

// From Web  從網(wǎng)址獲取html信息
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);

1.1、這里介紹一下最后一種用法

var web = new HtmlWeb();
var doc = web.Load(url);

在 web 中我們還可以設(shè)置cookie、headers等信息,來處理一些特定的網(wǎng)站需求,比如需要登陸等。

1.2 用法解釋

網(wǎng)頁在你查看網(wǎng)頁源代碼之后只是一段字符串,而爬蟲所做的就是在這堆字符串中,查詢到我們想要的信息,挑選出來。
以往的篩選方法:正則 (太麻煩了,寫起來有些頭疼)
HtmlAgilityPack 支持通過XPath來解析我們需要的信息。

1.2.1 在哪里找XPath?

網(wǎng)頁右鍵檢查

通過XPath就可以準(zhǔn)確獲取你想要元素的全部信息。

1.2.2 獲取選中Html元素的信息?

獲取選中元素

var web = new HtmlWeb();
var doc = web.Load(url);
var htmlnode = doc?.DocumentNode?.SelectSingleNode("/html/body/header")

獲取元素信息

htmlnode.InnerText;
htmlnode.InnerHtml;
//根據(jù)屬性取值
htmlnode?.GetAttributeValue("src", "未找到")

2、自己封裝的類庫

 /// <summary>
  /// 下載HTML幫助類
  /// </summary>
  public static class LoadHtmlHelper
  {
    /// <summary>
    /// 從Url地址下載頁面
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public async static ValueTask<HtmlDocument> LoadHtmlFromUrlAsync(string url)
    {
      HtmlWeb web = new HtmlWeb();
       return await
         web?.LoadFromWebAsync(url);
    }

    /// <summary>
    /// 獲取單個(gè)節(jié)點(diǎn)擴(kuò)展方法
    /// </summary>
    /// <param name="htmlDocument">文檔對(duì)象</param>
    /// <param name="xPath">xPath路徑</param>
    /// <returns></returns>
    public static HtmlNode GetSingleNode(this HtmlDocument htmlDocument, string xPath)
    {
     return htmlDocument?.DocumentNode?.SelectSingleNode(xPath);
    }

    /// <summary>
    /// 獲取多個(gè)節(jié)點(diǎn)擴(kuò)展方法
    /// </summary>
    /// <param name="htmlDocument">文檔對(duì)象</param>
    /// <param name="xPath">xPath路徑</param>
    /// <returns></returns>
    public static HtmlNodeCollection GetNodes(this HtmlDocument htmlDocument, string xPath)
    {
      return htmlDocument?.DocumentNode?.SelectNodes(xPath);
    }

   

    /// <summary>
    /// 獲取多個(gè)節(jié)點(diǎn)擴(kuò)展方法
    /// </summary>
    /// <param name="htmlDocument">文檔對(duì)象</param>
    /// <param name="xPath">xPath路徑</param>
    /// <returns></returns>
    public static HtmlNodeCollection GetNodes(this HtmlNode htmlNode, string xPath)
    {
      return htmlNode?.SelectNodes(xPath);
    }


    /// <summary>
    /// 獲取單個(gè)節(jié)點(diǎn)擴(kuò)展方法
    /// </summary>
    /// <param name="htmlDocument">文檔對(duì)象</param>
    /// <param name="xPath">xPath路徑</param>
    /// <returns></returns>
    public static HtmlNode GetSingleNode(this HtmlNode htmlNode, string xPath)
    {
      return htmlNode?.SelectSingleNode(xPath);
    }

    /// <summary>
    /// 下載圖片
    /// </summary>
    /// <param name="url">地址</param>
    /// <param name="filpath">文件路徑</param>
    /// <returns></returns>
    public async static ValueTask<bool> DownloadImg(string url ,string filpath)
    {
      HttpClient httpClient = new HttpClient();
      try
      {
        var bytes = await httpClient.GetByteArrayAsync(url);
        using (FileStream fs = File.Create(filpath))
        {
          fs.Write(bytes, 0, bytes.Length);
        }
        return File.Exists(filpath);
      }
      catch (Exception ex)
      {
       
        throw new Exception("下載圖片異常", ex);
      }
      
    }
  }

3、自己寫的爬蟲案例,爬取的網(wǎng)站https://www.meitu131.com/

數(shù)據(jù)存儲(chǔ)層沒有實(shí)現(xiàn),懶得寫了,靠你們嘍,我是數(shù)據(jù)暫時(shí)存在了文件中
GitHub地址:https://github.com/ZhangQueque/quewaner.Crawler.git

以上就是C# 爬蟲簡(jiǎn)單教程的詳細(xì)內(nèi)容,更多關(guān)于c# 爬蟲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#異步方法返回void與Task的區(qū)別詳解

    C#異步方法返回void與Task的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于C#異步方法返回void與Task的區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C#常用正則驗(yàn)證函數(shù)示例

    C#常用正則驗(yàn)證函數(shù)示例

    這篇文章主要介紹了C#常用正則驗(yàn)證函數(shù),舉例分析了C#針對(duì)IP驗(yàn)證、價(jià)格驗(yàn)證及正整數(shù)驗(yàn)證的相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • C#正則過濾HTML標(biāo)簽并保留指定標(biāo)簽的方法

    C#正則過濾HTML標(biāo)簽并保留指定標(biāo)簽的方法

    這篇文章主要介紹了C#正則過濾HTML標(biāo)簽并保留指定標(biāo)簽的方法,涉及C#針對(duì)頁面HTML元素正則匹配與替換相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • 深入理解C#中的Delegate

    深入理解C#中的Delegate

    委托是一種安全地封裝方法的類型,它與 C 和 C++ 中的函數(shù)指針類似。與 C 中的函數(shù)指針不同,委托是面向?qū)ο蟮摹㈩愋桶踩暮捅kU(xiǎn)的。委托的類型由委托的名稱定義
    2016-07-07
  • C#如何使用PaddleOCR進(jìn)行圖片文字識(shí)別功能

    C#如何使用PaddleOCR進(jìn)行圖片文字識(shí)別功能

    PaddlePaddle(飛槳)是百度開發(fā)的深度學(xué)習(xí)平臺(tái),旨在為開發(fā)者提供全面、靈活的工具集,用于構(gòu)建、訓(xùn)練和部署各種深度學(xué)習(xí)模型,它具有開放源代碼、高度靈活性、可擴(kuò)展性和分布式訓(xùn)練等特點(diǎn),這篇文章主要介紹了C#使用PaddleOCR進(jìn)行圖片文字識(shí)別,需要的朋友可以參考下
    2024-04-04
  • Unity中的Tilemap流程分析

    Unity中的Tilemap流程分析

    這篇文章給大家介紹Unity中的Tilemap流程分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例

    C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例

    本文主要介紹了C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • .net使用cap實(shí)現(xiàn)消息異步處理

    .net使用cap實(shí)現(xiàn)消息異步處理

    CAP 是一個(gè)基于 .NET Standard 的 C# 庫,它是一種處理分布式事務(wù)的解決方案,同樣具有 EventBus 的功能,它具有輕量級(jí)、易使用、高性能等特點(diǎn),本文給大家介紹了.net下使用cap實(shí)現(xiàn)消息異步處理,需要的朋友可以參考下
    2024-05-05
  • C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼

    C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼

    這篇文章介紹了C#由當(dāng)前日期計(jì)算相應(yīng)的周一和周日的實(shí)例代碼,有需要的朋友可以參考一下
    2013-09-09
  • 詳解C#泛型的類型參數(shù)約束

    詳解C#泛型的類型參數(shù)約束

    這篇文章主要介紹了C#泛型的類型參數(shù)約束的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

丽水市| 台北县| 启东市| 九江县| 沙河市| 汉川市| 盐边县| 峡江县| 洞头县| 应城市| 两当县| 五大连池市| 大化| 罗山县| 马公市| 涿州市| 高阳县| 永安市| 黎川县| 金门县| 蕲春县| 丰顺县| 保靖县| 建瓯市| 东丽区| 天全县| 繁昌县| 深水埗区| 柳河县| 铜川市| 安塞县| 桐城市| 克东县| 琼海市| 绥中县| 色达县| 即墨市| 凯里市| 巢湖市| 彝良县| 高邮市|