服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - c# 爬取优酷电影信息(1)

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

2022-11-02 11:19三十三重天 C#

这篇文章主要介绍了c# 如何爬取优酷电影信息,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下

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

在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。
介绍:
官网:#4ede939eb197852942af73d18fcb81bc#
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),具有多种重载方式,以下列举官网的三个实例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <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);
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/// <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; }
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/// <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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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# 爬取优酷电影信息的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/foxhappy/p/14450449.html

延伸 · 阅读

精彩推荐
  • C#C# Soap调用WebService的实例

    C# Soap调用WebService的实例

    下面小编就为大家带来一篇C# Soap调WebService的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    梦想总是这么遥远5142022-02-16
  • C#WindowsForm实现警告消息框的实例代码

    WindowsForm实现警告消息框的实例代码

    这篇文章主要介绍了WindowsForm如何实现警告消息框,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    zhuanghamiao4352022-09-27
  • C#C#编写Windows服务程序详细步骤详解(图文)

    C#编写Windows服务程序详细步骤详解(图文)

    本文介绍了如何用C#创建、安装、启动、监控、卸载简单的Windows Service 的内容步骤和注意事项,需要的朋友可以参考下...

    C#教程网6002022-01-22
  • C#Unity实现图形相交检测

    Unity实现图形相交检测

    这篇文章主要为大家详细介绍了Unity实现图形相交检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小混沌11652022-09-05
  • C#WPF利用RPC调用其他进程的方法详解

    WPF利用RPC调用其他进程的方法详解

    这篇文章主要给大家介绍了关于WPF利用RPC调用其他进程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    lindexi7532022-02-24
  • C#C#中foreach循环对比for循环的优势和劣势

    C#中foreach循环对比for循环的优势和劣势

    循环语句是编程的基本语句,在C#中除了沿用C语言的循环语句外,还提供了foreach语句来实现循环,下面这篇文章主要给大家介绍了关于C#中foreach循环对比...

    郑小超6922022-01-21
  • C#c# 实现子窗口关闭父窗口也关闭的简单实例

    c# 实现子窗口关闭父窗口也关闭的简单实例

    下面小编就为大家带来一篇c# 实现子窗口关闭父窗口也关闭的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看...

    C#教程网6532021-12-27
  • C#C#实现带消息数的App图标

    C#实现带消息数的App图标

    这篇文章主要介绍了如何使用C#实现带消息数的App图标的方法,并附上全部源码,分享给大家,有需要的小伙伴可以参考下。...

    C#教程网7242021-11-05