c\#유쿠 영화 정보 얻 기(2)

4.567915.에서 우 리 는 유쿠 단일 페이지 에 대한 오 르 기 를 실현 했다.간단하게 돌 이 켜 보면 Html Agility Pack 라 이브 러 리 를 사용 하여 파충류 에 대한 오 르 기 는 모두 3 단계 로 나 뉜 다.
파충류 단계
페이지 불 러 오기
분석 데이터
데이터 저장
첫 번 째 문서 에 이 어 파충류 의 진급,이 글 은 주로 이전 편 에 대한 진급 이다.실 현 된 기능 은 주로 다음 과 같다.
1.영화 카 테 고리 리스트 에 올 라 가기
2.각 유형의 영화 정 보 를 순환 하고 각 유형의 정 보 를 페이지 별로 나 누 어 추출 합 니 다.
3.기어 오 른 데 이 터 를 데이터베이스 에 저장
영화 카 테 고리 목록

Chrome 브 라 우 저,F12 를 사용 하여 현재 위 치 를 찾 아 현재 위치 에 있 는 Xpath 를 얻 습 니 다.우리 가 필요 로 하 는 데 이 터 는 영화 의 분류 코드 와 영화 유형 이름 이다.
규칙 분석:
XPATH 경 로 는'//*[@id='filter Panel']/div/ul/li/a')
카 테 고리 인 코딩 은 A 탭 Href 경로 의 내용 입 니 다.캡 처 합 니 다.
카 테 고리 이름 은 A 태그 InnerTest 입 니 다.캡 처 합 니 다.
코드 예제

  //  web  
   private static readonly string _url = "http://list.youku.com/category/video/c_0.html";

  /// <summary>
  ///         
  /// </summary>
  public static List<VideoType> GetVideoTypes()
  {
   //  web  
   var web = new HtmlWeb();
   var doc = web.Load(_url);

   //    -       
   var allTypes = doc.DocumentNode.SelectNodes("//*[@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;
  }
2.각 유형의 총 페이지 수 를 추출 합 니 다.
code 는 영화 카 테 고리 인 코딩 입 니 다.
페이지 규칙$"이전 장절"
페이지 규칙 에 따라 기어 오 르 기:

  /// <summary>
  ///            
  /// </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();
   //       
   var lastsecond = pageList[pageList.Count - 2];
   return Convert.ToInt32(lastsecond.InnerText);
  }
3.페이지 번호 에 따라 각 영화 유형의 내용 을 얻 을 수 있 습 니 다.
페이지 규칙 에 따라 페이지 를 나 눈 후의 주 소 는?
code 는 인 코딩 pageIndex 를 몇 페이지 로 합 니까?
페이지 규칙:http://list.youku.com/category/show/[code].html
페이지 규칙 에 따라 기어 오 르 기:

 /// <summary>
  ///           
  /// </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;
  }
4.테스트 기어 오 른 결과

  /// <summary>
  ///         
  /// </summary>
  public static void PrintContent()
  {
   var count = 0;
   foreach (var node in GetVideoTypes())
   {
    var resultLi = new List<VideoContent>();
    //          
    var pageCount = GetPageCountByCode(node.Code);
    //        
    for (var i = 1; i <= pageCount; i++) resultLi.AddRange(GetContentsByCode(node.Code, i));
    Console.WriteLine($"  {node.Code} \t   {pageCount} \t    {resultLi.Count}");
    count += resultLi.Count;
   }

   Console.WriteLine($"    {count}");
  }
코드 다운로드 주소:
http://list.youku.com/category/show/[code]s_1_d_1_p{pageIndex}.html
이상 은 c\#유쿠 영화 정보 얻 기(2)의 상세 한 내용 입 니 다.c\#유쿠 영화 정보 얻 기 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기