您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关c#如何爬取优酷电影信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
爬虫步骤
加载页面
解析数据
保存数据
继第一篇文档后的爬虫进阶,本文章主要是对上一篇的进阶。实现的功能主要为:
1、爬取电影类别列表
2、循环每个类别的电影信息,对每个类别的信息分页爬取
3、爬取的数据保存到数据库中

使用Chrome浏览器,F12,找到当前位置,得到当前位置的Xpath。我们需要的数据是电影的类别编码和电影类别名称。
规则分析:
XPATH路径为 "//*[@id='filterPanel']/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;
  }code 为电影类别编码
页面规则 $"http://list.youku.com/category/show/[code].html"
根据页面规则进行爬取:
  /// <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);
  }根据分页规则分析出分页后的地址为
code 为编码 pageIndex为第几页
页面规则:http://list.youku.com/category/show/[code]s_1_d_1_p{pageIndex}.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;
  }  /// <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}");
  }关于“c#如何爬取优酷电影信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。