手把手教你爬取优酷电影信息 您所在的位置:网站首页 优酷页面 手把手教你爬取优酷电影信息

手把手教你爬取优酷电影信息

2024-04-16 16:06| 来源: 网络整理| 查看: 265

上一章节中我们实现了对优酷单页面的爬取,简单进行回顾一下,使用HtmlAgilityPack库,对爬虫的爬取一共分为三步

爬虫步骤 加载页面 解析数据 保存数据

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

一、爬取电影类别列表

电影类别页.png

使用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"; /// /// 得到所有的类别 /// public static List 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(); 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" 根据页面规则进行爬取:

/// /// 得到当前类别的总页数 /// 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.html 根据页面规则进行爬取:

/// /// 得到当前类别的内容 /// public static List 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(); 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; } 四、测试爬取的结果 /// /// 打印得到的内容 /// public static void PrintContent() { var count = 0; foreach (var node in GetVideoTypes()) { var resultLi = new List(); //得到当前类别总分页数 var pageCount = GetPageCountByCode(node.Code); //遍历分页得到内容 for (var i = 1; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有