日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 小世界的野孩子 2021-04-07

上一章節(jié)中我們實(shí)現(xiàn)了對(duì)優(yōu)酷單頁(yè)面的爬取,簡(jiǎn)單進(jìn)行回顧一下,使用HtmlAgilityPack庫(kù),對(duì)爬蟲(chóng)的爬取一共分為三步

  • 爬蟲(chóng)步驟
    • 加載頁(yè)面
    • 解析數(shù)據(jù)
    • 保存數(shù)據(jù)

繼第一篇文檔后的爬蟲(chóng)進(jìn)階,本文章主要是對(duì)上一篇的進(jìn)階。實(shí)現(xiàn)的功能主要為:
1、爬取電影類別列表
2、循環(huán)每個(gè)類別的電影信息,對(duì)每個(gè)類別的信息分頁(yè)爬取
3、爬取的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中

一、爬取電影類別列表

電影類別頁(yè).png

使用Chrome瀏覽器,F(xiàn)12,找到當(dāng)前位置,得到當(dāng)前位置的Xpath。我們需要的數(shù)據(jù)是電影的類別編碼和電影類別名稱。

規(guī)則分析:
XPATH路徑為 "http://*[@id='filterPanel']/div/ul/li/a")
類別編碼為A標(biāo)簽Href路徑的內(nèi)容,我們對(duì)其進(jìn)行截取
類別名稱為A標(biāo)簽InnerTest,我們對(duì)其進(jìn)行截取

代碼示例

     //加載web內(nèi)容
         private static readonly string _url = "http://list.youku.com/category/video/c_0.html";

        /// <summary>
        ///     得到所有的類別
        /// </summary>
        public static List<VideoType> GetVideoTypes()
        {
            //加載web內(nèi)容
            var web = new HtmlWeb();
            var doc = web.Load(_url);

            //內(nèi)容解析-獲得所有的類別
            var allTypes = doc.DocumentNode.SelectNodes("http://*[@id='filterPanel']/div/ul/li/a").ToList();

            //類別列表中去掉【全部】這個(gè)選項(xiàng)
            var typeResults = allTypes.Where((u, i) => { return i > 0; }).ToList();

            var reList = new List<VideoType>();
            foreach (var node in typeResults)
            {
                var href = node.Attributes["href"].Value;
                reList.Add(new VideoType
                {
                    Code = href.Substring(href.LastIndexOf("/") + 1, href.LastIndexOf(".") - href.LastIndexOf("/") - 1),
                    Name = node.InnerText
                });
            }

            return reList;
        }

二、爬取每個(gè)類別的總分頁(yè)數(shù)

code 為電影類別編碼
頁(yè)面規(guī)則 $"http://list.youku.com/category/show/{code}.html"
根據(jù)頁(yè)面規(guī)則進(jìn)行爬取:

        /// <summary>
        ///     得到當(dāng)前類別的總頁(yè)數(shù)
        /// </summary>
        public static int GetPageCountByCode(string code)
        {
            var web = new HtmlWeb();
            var doc = web.Load($"http://list.youku.com/category/show/{code}.html");

            //分頁(yè)列表
            var pageList = doc.DocumentNode.CssSelect(".yk-pages li").ToList();
            //得到倒數(shù)第二項(xiàng)
            var lastsecond = pageList[pageList.Count - 2];
            return Convert.ToInt32(lastsecond.InnerText);
        }

三、按照頁(yè)碼得到每個(gè)電影類別的內(nèi)容

根據(jù)分頁(yè)規(guī)則分析出分頁(yè)后的地址為
code 為編碼 pageIndex為第幾頁(yè)
頁(yè)面規(guī)則:http://list.youku.com/category/show/{code}s_1_d_1_p{pageIndex}.html
根據(jù)頁(yè)面規(guī)則進(jìn)行爬取:

    /// <summary>
        ///     得到當(dāng)前類別的內(nèi)容
        /// </summary>
        public static List<VideoContent> GetContentsByCode(string code, int pageIndex)
        {
            var web = new HtmlWeb();
            var doc = web.Load($"http://list.youku.com/category/show/{code}_s_1_d_1_p_{pageIndex}.html");

            var returnLi = new List<VideoContent>();
            var contents = doc.DocumentNode.CssSelect(".yk-col4").ToList();

            foreach (var node in contents)
                returnLi.Add(new VideoContent
                {
                    PageIndex = pageIndex.ToString(),
                    Code = code,
                    Title = node.CssSelect(".info-list .title a").FirstOrDefault()?.InnerText,
                    Hits = node.CssSelect(".info-list li").LastOrDefault()?.InnerText,
                    Href = node.CssSelect(".info-list .title a").FirstOrDefault()?.Attributes["href"].Value,
                    ImgHref = node.CssSelect(".p-thumb img").FirstOrDefault()?.Attributes["Src"].Value
                });

            return returnLi;
        }

四、測(cè)試爬取的結(jié)果


        /// <summary>
        ///     打印得到的內(nèi)容
        /// </summary>
        public static void PrintContent()
        {
            var count = 0;
            foreach (var node in GetVideoTypes())
            {
                var resultLi = new List<VideoContent>();
                //得到當(dāng)前類別總分頁(yè)數(shù)
                var pageCount = GetPageCountByCode(node.Code);
                //遍歷分頁(yè)得到內(nèi)容
                for (var i = 1; i <= pageCount; i++) resultLi.AddRange(GetContentsByCode(node.Code, i));
                Console.WriteLine($"編碼{node.Code} \t 頁(yè)數(shù){pageCount} \t 總個(gè)數(shù){resultLi.Count}");
                count += resultLi.Count;
            }

            Console.WriteLine($"總個(gè)數(shù)為{count}");
        }

代碼下載地址:

https://github.com/happlyfox/FoxCrawler/tree/master/%E5%AD%A6%E4%B9%A0%E7%A4%BA%E4%BE%8B/YouKuCrawler/YouKuCrawlerAsync

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多