<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          C# 手把手教你爬取優(yōu)酷電影信息

          共 10431字,需瀏覽 21分鐘

           ·

          2021-03-05 18:56


          前言


          爬蟲的制作主要分為三個方面 


          1、加載網(wǎng)頁結構 


          2、解析網(wǎng)頁結構,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體 


          3、保存數(shù)據(jù)實體(數(shù)據(jù)庫,文本等)


          在實際的編碼過程中,找到了一個好的類庫"HtmlAgilityPack"。


          介紹


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


          Html Agility Pack源碼中的類大概有28個左右,其實不算一個很復雜的類庫,但它的功能確不弱,為解析DOM已經(jīng)提供了足夠強大的功能支持,可以跟jQuery操作DOM媲美) 


          使用說明:Html Agility Pack(XPath 定位),在實際使用過程中,發(fā)現(xiàn)有部分內容如果通過Css進行定位會比XPath更加方便,所以通過查找找到了另外一個CSS的解析了類庫 ScrapySharp(Css 定位)


          整理


          Nuget包需要引用的庫 


          1、Html Agility Pack(XPath 定位) 


          2、ScrapySharp(Css 定位)


          代碼下載地址:


          https://github.com/happlyfox/FoxCrawler

          一、加載網(wǎng)頁結構

          Html Agility Pack封裝了加載內容的方法,使doc.Load(arguments),具有多種重載方式,以下列舉官網(wǎng)的三個實例

          /// <summary>
          /// 加載網(wǎng)頁結構
          /// </summary>
          private static void LoadDocment()
          {
                // 從文件中加載
                var docFile = new HtmlDocument();
                docFile.Load("file path");

                // 從字符串中加載
                var docHtml = new HtmlDocument();
                docHtml.LoadHtml("html");

                // 從網(wǎng)站中加載
                var url = "http://html-agility-pack.net/";
                var web = new HtmlWeb();
                var docWeb = web.Load(url);
          }

          二、解析網(wǎng)頁結構,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體

             /// <summary>
              /// 解析網(wǎng)頁結構
              /// </summary>
              private static YouKu ParsingWebStructure()
              {
                  /*選用優(yōu)酷片庫列表
                   地址:http://list.youku.com/category/show/c_96_s_1_d_1_p_{index}.html
                  */

                  //首先加載web內容
                  var url = "http://list.youku.com/category/show/c_96_s_1_d_1_p_1.html";
                  var web = new HtmlWeb();
                  var doc = web.Load(url);

                  //輸出WebHtml內容
                  //Console.WriteLine(doc.DocumentNode.InnerHtml);

                  /* HtmlAgilityPack 解析方式官網(wǎng)提供的有倆種示例*/
                  //1、 With XPath 
                  var value = doc.DocumentNode.SelectSingleNode("http://*[@id='total_videonum']").Attributes["id"].Value;
                  var resultCount = doc.DocumentNode.SelectSingleNode("http://*[@id='total_videonum']").InnerText;

                  Console.WriteLine($"id='{value}' 篩選結果:{resultCount}個");
                  // 2、With LINQ 
                  var linqNodes = doc.DocumentNode.SelectSingleNode("http://*[@id='filterPanel']/div[2]/ul").Descendants("li").ToList();

                  Console.WriteLine("電影產(chǎn)地:");
                  List<string> videoCountry = new List<string>();
                  foreach (var node in linqNodes)
                  {
                      videoCountry.Add(node.InnerText);
                      Console.Write($"{node.InnerText} \t");
                  }

                  //3、使用ScrapySharp進行Css定位
                  var cssNodes = doc.DocumentNode.CssSelect("#filterPanel > div > label");
                  Console.WriteLine();

                  List<string> videoType = new List<string>();
                  foreach (var node in cssNodes)
                  {
                      videoType.Add(node.InnerText);
                      Console.Write($"{node.InnerText} \t");
                  }

                  //構造實體
                  YouKu model = new YouKu()
                  {
                      id = value,
                      videoNum = int.Parse(resultCount),
                      videoCountry = videoCountry,
                      videoType = videoType
                  };

                  return model;
              }


          public class YouKu
          {
              public string id { get; set; }

              public int videoNum { get; set; }

              public List<string> videoCountry { get; set; }
              public List<string> videoType { get; set; }
          }

          三、保存數(shù)據(jù)實體,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體

              /// <summary>
              /// 保存數(shù)據(jù)實體
              /// </summary>
              private static void SavaData()
              {
                  var model = ParsingWebStructure();
                  var path = "youku.txt";

                  if (!File.Exists(path))
                  {
                      File.Create(path);
                  }

                  File.WriteAllText(path, getJsonByObject(model));
              }

              private static string getJsonByObject(Object obj)
              {
                  //實例化DataContractJsonSerializer對象,需要待序列化的對象類型
                  DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
                  //實例化一個內存流,用于存放序列化后的數(shù)據(jù)
                  MemoryStream stream = new MemoryStream();
                  //使用WriteObject序列化對象
                  serializer.WriteObject(stream, obj);
                  //寫入內存流中
                  byte[] dataBytes = new byte[stream.Length];
                  stream.Position = 0;
                  stream.Read(dataBytes, 0, (int)stream.Length);
                  //通過UTF8格式轉換為字符串
                  return Encoding.UTF8.GetString(dataBytes);
              }

          四、Main

          static void Main(string[] args)
          {
                  ///爬蟲的制作主要分為三個方面
                  ///1、加載網(wǎng)頁結構
                  ///2、解析網(wǎng)頁結構,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體
                  ///3、保存數(shù)據(jù)實體(數(shù)據(jù)庫,文本等)
                  
                  /*
                   * 在實際的編碼過程中,找到了一個好的類庫“HtmlAgilityPack”。
                   * 介紹:
                   * 官網(wǎng):http://html-agility-pack.net/?z=codeplex
                   * Html Agility Pack源碼中的類大概有28個左右,其實不算一個很復雜的類庫,但它的功能確不弱,為解析DOM已經(jīng)提供了足夠強大的功能支持,可以跟jQuery操作DOM媲美)
                   * 使用說明:
                   * Html Agility Pack(XPath 定位),在實際使用過程中,發(fā)現(xiàn)有部分內容如果通過Css進行定位會比XPath更加方便,所以通過查找找到了另外一個CSS的解析了類庫 ScrapySharp(Css 定位)
                   * 整理:
                   * Nuget包需要引用的庫
                   * 1、Html Agility Pack(XPath 定位)
                   * 2、ScrapySharp(Css 定位)
                   */


                  //第一點——加載網(wǎng)頁結構,Html Agility Pack封裝了加載內容的方法,使用doc.Load(arguments),具有多種重載方式,以下列舉官網(wǎng)的三個實例
                  //LoadDocment();

                  //第二點——解析網(wǎng)頁結構,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體
                  //ParsingWebStructure();

                  //第三點——保存數(shù)據(jù)實體,轉變?yōu)榉闲枨蟮臄?shù)據(jù)實體
                  SavaData();
                  Console.Read();
          }



          往期精彩回顧




          【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程 ★★★

          .NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個接口多種實現(xiàn)的依賴注入與動態(tài)選擇看這篇就夠了

          10個小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時任務管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務輕松實現(xiàn)作業(yè)調度

          現(xiàn)身說法:實際業(yè)務出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關于C#異步編程你應該了解的幾點建議

          C#異步編程看這篇就夠了


          瀏覽 53
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰99在线 | 在线午夜黄色电影 | 国产精品毛片一区视频播 | 99热18| 日韩欧美成人电影 |