c# 爬取优酷电影信息(2)
上一章节中我们实现了对优酷单页面的爬取,简单进行回顾一下,使用HtmlAgilityPack库,对爬虫的爬取一共分为三步
爬虫步骤
- 加载页面
- 解析数据
- 保存数据
继第一篇文档后的爬虫进阶,本文章主要是对上一篇的进阶。实现的功能主要为:
1、爬取电影类别列表
2、循环每个类别的电影信息,对每个类别的信息分页爬取
3、爬取的数据保存到数据库中
一、爬取电影类别列表
使用Chrome浏览器,F12,找到当前位置,得到当前位置的Xpath。我们需要的数据是电影的类别编码和电影类别名称。
规则分析:
XPATH路径为"//*[@id='filterPanel']/div/ul/li/a")
类别编码为A标签Href路径的内容,我们对其进行截取
类别名称为A标签InnerTest,我们对其进行截取
代码示例
//加载web内容 privatestaticreadonlystring_url="http://list.youku.com/category/video/c_0.html"; //////得到所有的类别 /// publicstaticListGetVideoTypes() { //加载web内容 varweb=newHtmlWeb(); vardoc=web.Load(_url); //内容解析-获得所有的类别 varallTypes=doc.DocumentNode.SelectNodes("//*[@id='filterPanel']/div/ul/li/a").ToList(); //类别列表中去掉【全部】这个选项 vartypeResults=allTypes.Where((u,i)=>{returni>0;}).ToList(); varreList=newList (); foreach(varnodeintypeResults) { varhref=node.Attributes["href"].Value; reList.Add(newVideoType { Code=href.Substring(href.LastIndexOf("/")+1,href.LastIndexOf(".")-href.LastIndexOf("/")-1), Name=node.InnerText }); } returnreList; }
二、爬取每个类别的总分页数
code为电影类别编码
页面规则$"http://list.youku.com/category/show/[code].html"
根据页面规则进行爬取:
//////得到当前类别的总页数 /// publicstaticintGetPageCountByCode(stringcode) { varweb=newHtmlWeb(); vardoc=web.Load($"http://list.youku.com/category/show/[code].html"); //分页列表 varpageList=doc.DocumentNode.CssSelect(".yk-pagesli").ToList(); //得到倒数第二项 varlastsecond=pageList[pageList.Count-2]; returnConvert.ToInt32(lastsecond.InnerText); }
三、按照页码得到每个电影类别的内容
根据分页规则分析出分页后的地址为
code为编码pageIndex为第几页
页面规则:http://list.youku.com/category/show/[code]s_1_d_1_p{pageIndex}.html
根据页面规则进行爬取:
//////得到当前类别的内容 /// publicstaticListGetContentsByCode(stringcode,intpageIndex) { varweb=newHtmlWeb(); vardoc=web.Load($"http://list.youku.com/category/show/[code]_s_1_d_1_p_{pageIndex}.html"); varreturnLi=newList (); varcontents=doc.DocumentNode.CssSelect(".yk-col4").ToList(); foreach(varnodeincontents) returnLi.Add(newVideoContent { PageIndex=pageIndex.ToString(), Code=code, Title=node.CssSelect(".info-list.titlea").FirstOrDefault()?.InnerText, Hits=node.CssSelect(".info-listli").LastOrDefault()?.InnerText, Href=node.CssSelect(".info-list.titlea").FirstOrDefault()?.Attributes["href"].Value, ImgHref=node.CssSelect(".p-thumbimg").FirstOrDefault()?.Attributes["Src"].Value }); returnreturnLi; }
四、测试爬取的结果
//////打印得到的内容 /// publicstaticvoidPrintContent() { varcount=0; foreach(varnodeinGetVideoTypes()) { varresultLi=newList(); //得到当前类别总分页数 varpageCount=GetPageCountByCode(node.Code); //遍历分页得到内容 for(vari=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}"); }
代码下载地址:
https://github.com/happlyfox/FoxCrawler/tree/master/%E5%AD%A6%E4%B9%A0%E7%A4%BA%E4%BE%8B/YouKuCrawler/YouKuCrawlerAsync
以上就是c#爬取优酷电影信息(2)的详细内容,更多关于c#爬取优酷电影信息的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。