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

作者:三十三重天 时间:2022-04-23 13:34:59 

目录
  • 第一点——加载网页结构

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

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

  • 第四点——main

爬虫的制作主要分为三个方面
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();
}

来源:https://www.cnblogs.com/foxhappy/p/14450449.html

标签:c#,爬虫,优酷,电影信息
0
投稿

猜你喜欢

  • Spring Data环境搭建实现过程解析

    2022-02-26 20:13:38
  • 将本地jar包安装进入maven仓库(实现方法)

    2022-06-18 00:35:54
  • Android Service详解及示例代码

    2021-12-24 05:44:17
  • 解决Springboot @Autowired 无法注入问题

    2022-04-14 21:19:01
  • spring mvc中直接注入的HttpServletRequst安全吗

    2021-12-29 07:48:16
  • Android RecyclerView添加搜索过滤器的示例代码

    2022-03-08 21:44:49
  • Springboot 跨域配置无效及接口访问报错的解决方法

    2021-10-02 01:04:11
  • 一文带你探究Spring中Bean的线程安全性问题

    2023-10-03 10:52:13
  • 深入了解Java对象的克隆

    2021-10-29 13:59:35
  • c++ 虚继承,多继承相关总结

    2022-11-19 12:09:35
  • mybatis映射和实际类型不一致的问题

    2023-08-13 18:09:06
  • Java实现登录与注册页面

    2023-04-17 03:21:20
  • 详解IDEA启动多个微服务的配置方法

    2023-11-24 09:22:24
  • Android应用中炫酷的横向和环形进度条的实例分享

    2023-09-21 17:33:08
  • C#判断日期是否到期的方法

    2021-09-10 14:40:00
  • 一文详解Java抽象类到底有多抽象

    2023-08-27 01:41:26
  • 用java实现杨辉三角的示例代码

    2023-08-12 09:02:21
  • Java main 方法面试题的详细整理

    2023-11-24 23:53:30
  • 浅谈Java代码的 微信长链转短链接口使用 post 请求封装Json(实例)

    2023-07-27 19:36:09
  • Spring框架基于注解开发CRUD详解

    2021-08-04 03:39:03
  • asp之家 软件编程 m.aspxhome.com