c# 爬取优酷电影信息(1)

 更新时间:2021年02月26日 09:45:40   作者:三十三重天  
这篇文章主要介绍了c# 如何爬取优酷电影信息,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

爬虫的制作主要分为三个方面
1、加载网页结构
2、解析网页结构,转变为符合需求的数据实体
3、保存数据实体(数据库,文本等)

在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。
介绍:
官网:http://html-agility-pack.net/?z=codeplex
Html Agility Pack源码中的类大概有28个左右,其实不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟jQuery操作DOM媲美)
使用说明:
Html Agility Pack(XPath 定位),在实际使用过程中,发现有部分内容如果通过Css进行定位会比XPath更加方便,所以通过查找找到了另外一个CSS的解析了类库 ScrapySharp(Css 定位)

整理:
Nuget包需要引用的库
1、Html Agility Pack(XPath 定位)
2、ScrapySharp(Css 定位)

代码下载地址:

https://github.com/happlyfox/FoxCrawler

第一点——加载网页结构

Html Agility Pack封装了加载内容的方法,使doc.Load(arguments),具有多种重载方式,以下列举官网的三个实例

 /// <summary>
 /// 加载网页结构
 /// </summary>
 private static void LoadDocment()
 {
  // 从文件中加载
  var docFile = new HtmlDocument();
  docFile.Load("file path");

  // 从字符串中加载
  var docHtml = new HtmlDocument();
  docHtml.LoadHtml("html");

  // 从网站中加载
  var url = "http://html-agility-pack.net/";
  var web = new HtmlWeb();
  var docWeb = web.Load(url);
 }

第二点——解析网页结构,转变为符合需求的数据实体

 /// <summary>
 /// 解析网页结构
 /// </summary>
 private static YouKu ParsingWebStructure()
 {
 /*选用优酷片库列表
  地址:http://list.youku.com/category/show/c_96_s_1_d_1_p_{index}.html 
 */

 //首先加载web内容
 var url = "http://list.youku.com/category/show/c_96_s_1_d_1_p_1.html";
 var web = new HtmlWeb();
 var doc = web.Load(url);

 //输出WebHtml内容
 //Console.WriteLine(doc.DocumentNode.InnerHtml);

 /* HtmlAgilityPack 解析方式官网提供的有俩种示例*/
 //1、 With XPath	
 var value = doc.DocumentNode.SelectSingleNode("//*[@id='total_videonum']").Attributes["id"].Value;
 var resultCount = doc.DocumentNode.SelectSingleNode("//*[@id='total_videonum']").InnerText;

 Console.WriteLine($"id='{value}' 筛选结果:{resultCount}个");
 // 2、With LINQ	
 var linqNodes = doc.DocumentNode.SelectSingleNode("//*[@id='filterPanel']/div[2]/ul").Descendants("li").ToList();

 Console.WriteLine("电影产地:");
 List<string> videoCountry = new List<string>();
 foreach (var node in linqNodes)
 {
  videoCountry.Add(node.InnerText);
  Console.Write($"{node.InnerText} \t");
 }

 //3、使用ScrapySharp进行Css定位
 var cssNodes = doc.DocumentNode.CssSelect("#filterPanel > div > label");
 Console.WriteLine();

 List<string> videoType = new List<string>();
 foreach (var node in cssNodes)
 {
  videoType.Add(node.InnerText);
  Console.Write($"{node.InnerText} \t");
 }

 //构造实体
 YouKu model = new YouKu()
 {
  id = value,
  videoNum = int.Parse(resultCount),
  videoCountry = videoCountry,
  videoType = videoType
 };

 return model;
 }


public class YouKu
{
 public string id { get; set; }

 public int videoNum { get; set; }

 public List<string> videoCountry { get; set; }
 public List<string> videoType { get; set; }
}

第三点——保存数据实体,转变为符合需求的数据实体

 /// <summary>
 /// 保存数据实体
 /// </summary>
 private static void SavaData()
 {
 var model = ParsingWebStructure();
 var path = "youku.txt";

 if (!File.Exists(path))
 {
  File.Create(path);
 }

 File.WriteAllText(path, getJsonByObject(model));
 }

 private static string getJsonByObject(Object obj)
 {
 //实例化DataContractJsonSerializer对象,需要待序列化的对象类型
 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
 //实例化一个内存流,用于存放序列化后的数据
 MemoryStream stream = new MemoryStream();
 //使用WriteObject序列化对象
 serializer.WriteObject(stream, obj);
 //写入内存流中
 byte[] dataBytes = new byte[stream.Length];
 stream.Position = 0;
 stream.Read(dataBytes, 0, (int)stream.Length);
 //通过UTF8格式转换为字符串
 return Encoding.UTF8.GetString(dataBytes);
 }

第四点——main

 static void Main(string[] args)
 {
 ///爬虫的制作主要分为三个方面
 ///1、加载网页结构
 ///2、解析网页结构,转变为符合需求的数据实体
 ///3、保存数据实体(数据库,文本等)


 /*
  * 在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。
  * 介绍:
  * 官网:http://html-agility-pack.net/?z=codeplex
  * Html Agility Pack源码中的类大概有28个左右,其实不算一个很复杂的类库,但它的功能确不弱,为解析DOM已经提供了足够强大的功能支持,可以跟jQuery操作DOM媲美)
  * 使用说明:
  * Html Agility Pack(XPath 定位),在实际使用过程中,发现有部分内容如果通过Css进行定位会比XPath更加方便,所以通过查找找到了另外一个CSS的解析了类库 ScrapySharp(Css 定位)
  * 整理:
  * Nuget包需要引用的库
  * 1、Html Agility Pack(XPath 定位)
  * 2、ScrapySharp(Css 定位)
  */


 //第一点——加载网页结构,Html Agility Pack封装了加载内容的方法,使用doc.Load(arguments),具有多种重载方式,以下列举官网的三个实例
 //LoadDocment();

 //第二点——解析网页结构,转变为符合需求的数据实体
 //ParsingWebStructure();

 //第三点——保存数据实体,转变为符合需求的数据实体
 SavaData();
 Console.Read();
 }

以上就是c# 爬取优酷电影信息(1)的详细内容,更多关于c# 爬取优酷电影信息的资料请关注脚本之家其它相关文章!

相关文章

  • C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    这篇文章主要介绍了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题,简单描述了访问者模式的定义并结合具体实例形式分析了C#使用访问者模式解决长隆欢乐世界问题的具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • C#获取打印机列表方法介绍

    C#获取打印机列表方法介绍

    这篇文章介绍了C#获取打印机列表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C#算法之罗马数字转整数

    C#算法之罗马数字转整数

    本文详细讲解了C#算法之罗马数字转整数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C#实现泛型List分组输出元素的方法

    C#实现泛型List分组输出元素的方法

    这篇文章主要介绍了C#实现泛型List分组输出元素的方法,涉及C#针对List的遍历、排序、输出等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Unity实现车型识别的示例代码

    Unity实现车型识别的示例代码

    这篇文章主要介绍了在Unity中接入百度AI,实现检测一张车辆图片的具体车型。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片的车辆品牌及型号。需要的可以参考一下
    2022-01-01
  • C#模拟http 发送post或get请求的简单实例

    C#模拟http 发送post或get请求的简单实例

    下面小编就为大家带来一篇C#模拟http 发送post或get请求的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Unity3d射箭小游戏实现示例

    Unity3d射箭小游戏实现示例

    这篇文章主要为大家介绍了Unity3d射箭小游戏实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • C#查看/写入日志到Windows事件查看器的操作方法

    C#查看/写入日志到Windows事件查看器的操作方法

    Windows 操作系统将与计算机的系统性能、应用程序和安全方面相关的每个事件记录在 C:\WINDOWS\system32\winevt 的日志中,事件查看器从这些原始事件日志中读取信息,然后以可读格式呈现信息,本文介绍了C#如何查看/写入日志到Windows事件查看器,需要的朋友可以参考下
    2024-09-09
  • c# 获取机器唯一识别码的示例

    c# 获取机器唯一识别码的示例

    这篇文章主要介绍了c# 获取机器唯一识别码的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#自定义事件监听实现方法

    C#自定义事件监听实现方法

    这篇文章主要介绍了C#自定义事件监听实现方法,涉及C#事件监听的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论