1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 10431字,需瀏覽 21分鐘

         ·

        2021-03-05 18:56


        前言


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


        1、加載網(wǎng)頁結(jié)構(gòu) 


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


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


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


        介紹


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


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


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


        整理


        Nuget包需要引用的庫 


        1、Html Agility Pack(XPath 定位) 


        2、ScrapySharp(Css 定位)


        代碼下載地址:


        https://github.com/happlyfox/FoxCrawler

        一、加載網(wǎng)頁結(jié)構(gòu)

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

        /// <summary>
        /// 加載網(wǎng)頁結(jié)構(gòu)
        /// </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)頁結(jié)構(gòu),轉(zhuǎn)變?yōu)榉闲枨蟮臄?shù)據(jù)實體

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

                //首先加載web內(nèi)容
                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內(nèi)容
                //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}' 篩選結(jié)果:{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");
                }

                //構(gòu)造實體
                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ù)實體,轉(zhuǎn)變?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());
                //實例化一個內(nèi)存流,用于存放序列化后的數(shù)據(jù)
                MemoryStream stream = new MemoryStream();
                //使用WriteObject序列化對象
                serializer.WriteObject(stream, obj);
                //寫入內(nèi)存流中
                byte[] dataBytes = new byte[stream.Length];
                stream.Position = 0;
                stream.Read(dataBytes, 0, (int)stream.Length);
                //通過UTF8格式轉(zhuǎn)換為字符串
                return Encoding.UTF8.GetString(dataBytes);
            }

        四、Main

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


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

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

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



        往期精彩回顧




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

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

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

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

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

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

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

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

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

        關(guān)于C#異步編程你應(yīng)該了解的幾點建議

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


        瀏覽 53
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            首页 - 91n | 肌肌桶肌肌软件下载大全 | 草草影院www色欧美极 | 91免费小电影 | 国产精品久久久久久久久久白浆 | 又大又长又粗又硬视频 | 韩日五十路高清 | 夜夜撸日日操 | 五月色婷婷综合AⅤ | 久久夜色精品国产亚洲AV卜 |