c# 爬取优酷电影信息(1)
爬虫的制作主要分为三个方面
1、加载网页结构
2、解析网页结构,转变为符合需求的数据实体
3、保存数据实体(数据库,文本等)
在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。
介绍:
官网:http://html-agility-pack.net/?z=codeplex
HtmlAgilityPack源码中的类大概有28个左右,其实不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟jQuery操作DOM媲美)
使用说明:
HtmlAgilityPack(XPath定位),在实际使用过程中,发现有部分内容如果通过Css进行定位会比XPath更加方便,所以通过查找找到了另外一个CSS的解析了类库ScrapySharp(Css定位)
整理:
Nuget包需要引用的库
1、HtmlAgilityPack(XPath定位)
2、ScrapySharp(Css定位)
代码下载地址:
https://github.com/happlyfox/FoxCrawler
第一点——加载网页结构
HtmlAgilityPack封装了加载内容的方法,使doc.Load(arguments),具有多种重载方式,以下列举官网的三个实例
//////加载网页结构 /// privatestaticvoidLoadDocment() { //从文件中加载 vardocFile=newHtmlDocument(); docFile.Load("filepath"); //从字符串中加载 vardocHtml=newHtmlDocument(); docHtml.LoadHtml("html"); //从网站中加载 varurl="http://html-agility-pack.net/"; varweb=newHtmlWeb(); vardocWeb=web.Load(url); }
第二点——解析网页结构,转变为符合需求的数据实体
//////解析网页结构 /// privatestaticYouKuParsingWebStructure() { /*选用优酷片库列表 地址:http://list.youku.com/category/show/c_96_s_1_d_1_p_{index}.html */ //首先加载web内容 varurl="http://list.youku.com/category/show/c_96_s_1_d_1_p_1.html"; varweb=newHtmlWeb(); vardoc=web.Load(url); //输出WebHtml内容 //Console.WriteLine(doc.DocumentNode.InnerHtml); /*HtmlAgilityPack解析方式官网提供的有俩种示例*/ //1、WithXPath varvalue=doc.DocumentNode.SelectSingleNode("//*[@id='total_videonum']").Attributes["id"].Value; varresultCount=doc.DocumentNode.SelectSingleNode("//*[@id='total_videonum']").InnerText; Console.WriteLine($"id='{value}'筛选结果:{resultCount}个"); //2、WithLINQ varlinqNodes=doc.DocumentNode.SelectSingleNode("//*[@id='filterPanel']/div[2]/ul").Descendants("li").ToList(); Console.WriteLine("电影产地:"); ListvideoCountry=newList (); foreach(varnodeinlinqNodes) { videoCountry.Add(node.InnerText); Console.Write($"{node.InnerText}\t"); } //3、使用ScrapySharp进行Css定位 varcssNodes=doc.DocumentNode.CssSelect("#filterPanel>div>label"); Console.WriteLine(); List videoType=newList (); foreach(varnodeincssNodes) { videoType.Add(node.InnerText); Console.Write($"{node.InnerText}\t"); } //构造实体 YouKumodel=newYouKu() { id=value, videoNum=int.Parse(resultCount), videoCountry=videoCountry, videoType=videoType }; returnmodel; } publicclassYouKu { publicstringid{get;set;} publicintvideoNum{get;set;} publicList videoCountry{get;set;} publicList videoType{get;set;} }
第三点——保存数据实体,转变为符合需求的数据实体
//////保存数据实体 /// privatestaticvoidSavaData() { varmodel=ParsingWebStructure(); varpath="youku.txt"; if(!File.Exists(path)) { File.Create(path); } File.WriteAllText(path,getJsonByObject(model)); } privatestaticstringgetJsonByObject(Objectobj) { //实例化DataContractJsonSerializer对象,需要待序列化的对象类型 DataContractJsonSerializerserializer=newDataContractJsonSerializer(obj.GetType()); //实例化一个内存流,用于存放序列化后的数据 MemoryStreamstream=newMemoryStream(); //使用WriteObject序列化对象 serializer.WriteObject(stream,obj); //写入内存流中 byte[]dataBytes=newbyte[stream.Length]; stream.Position=0; stream.Read(dataBytes,0,(int)stream.Length); //通过UTF8格式转换为字符串 returnEncoding.UTF8.GetString(dataBytes); }
第四点——main
staticvoidMain(string[]args) { ///爬虫的制作主要分为三个方面 ///1、加载网页结构 ///2、解析网页结构,转变为符合需求的数据实体 ///3、保存数据实体(数据库,文本等) /* *在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。 *介绍: *官网:http://html-agility-pack.net/?z=codeplex *HtmlAgilityPack源码中的类大概有28个左右,其实不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟jQuery操作DOM媲美) *使用说明: *HtmlAgilityPack(XPath定位),在实际使用过程中,发现有部分内容如果通过Css进行定位会比XPath更加方便,所以通过查找找到了另外一个CSS的解析了类库ScrapySharp(Css定位) *整理: *Nuget包需要引用的库 *1、HtmlAgilityPack(XPath定位) *2、ScrapySharp(Css定位) */ //第一点——加载网页结构,HtmlAgilityPack封装了加载内容的方法,使用doc.Load(arguments),具有多种重载方式,以下列举官网的三个实例 //LoadDocment(); //第二点——解析网页结构,转变为符合需求的数据实体 //ParsingWebStructure(); //第三点——保存数据实体,转变为符合需求的数据实体 SavaData(); Console.Read(); }
以上就是c#爬取优酷电影信息(1)的详细内容,更多关于c#爬取优酷电影信息的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。