乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

      上一章節(jié)中我們實現(xiàn)了對優(yōu)酷單頁面的爬取,簡單進行回顧一下,使用HtmlAgilityPack庫,對爬蟲的爬取一共分為三步

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

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

      一、爬取電影類別列表

      電影類別頁.png

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

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

      代碼示例

           //加載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();
      
                  //類別列表中去掉【全部】這個選項
                  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;
              }
      
      

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

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

              /// <summary>
              ///     得到當前類別的總頁數(shù)
              /// </summary>
              public static int GetPageCountByCode(string code)
              {
                  var web = new HtmlWeb();
                  var doc = web.Load($"http://list.youku.com/category/show/{code}.html");
      
                  //分頁列表
                  var pageList = doc.DocumentNode.CssSelect(".yk-pages li").ToList();
                  //得到倒數(shù)第二項
                  var lastsecond = pageList[pageList.Count - 2];
                  return Convert.ToInt32(lastsecond.InnerText);
              }
      

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

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

          /// <summary>
              ///     得到當前類別的內(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;
              }
      

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

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

      代碼下載地址:

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多