文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

c#如何爬取优酷电影信息

2023-06-06 14:03

关注

这篇文章将为大家详细讲解有关c#如何爬取优酷电影信息,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

爬虫步骤

继第一篇文档后的爬虫进阶,本文章主要是对上一篇的进阶。实现的功能主要为:
1、爬取电影类别列表
2、循环每个类别的电影信息,对每个类别的信息分页爬取
3、爬取的数据保存到数据库中

一、爬取电影类别列表

c#如何爬取优酷电影信息

使用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#如何爬取优酷电影信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯