1.HtmlAgilityPack 爬取优酷电影名

简介: 爬虫的制作主要分为三个方面1、加载网页结构2、解析网页结构,转变为符合需求的数据实体3、保存数据实体(数据库,文本等)在实际的编码过程中,找到了一个好的类库“HtmlAgilityPack”。

爬虫的制作主要分为三个方面
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();
    }
目录
相关文章
|
5天前
|
XML 存储 开发框架
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
c#教你网站数据轻松解析抓取,HtmlAgilityPack解析的奇妙之处
8 0
|
JavaScript 大数据 应用服务中间件
Python网络爬虫(JSON, Phantomjs, selenium/Chromedirver,豆瓣电影、斗鱼直播、京东商城爬取)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础、自动化测试、json、动态加载、反爬虫
3458 0
|
5月前
|
数据采集 开发框架 前端开发
使用C#和HtmlAgilityPack打造强大的Snapchat视频爬虫
Snapchat作为一款备受欢迎的社交媒体应用,允许用户分享照片和视频。然而,由于其特有的内容自动消失特性,爬虫开发面临一些挑战。本文将详细介绍如何巧妙运用C#和HtmlAgilityPack库,构建一个高效的Snapchat视频爬虫。该爬虫能够从Snapchat网页版中提取视频链接,并将其下载保存到本地。为了提升爬虫的效率和可靠性,我们将使用代理IP技术和多线程技术,以规避Snapchat的反爬机制。
|
6月前
|
数据采集 存储 JSON
抖音视频爬取项目:Dusk库的使用示例
抖音视频爬取项目:Dusk库的使用示例
|
9月前
|
数据采集 XML 存储
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
这个案例展示了如何使用 Scrapy 框架构建一个简单的爬虫项目,从网页中提取数据并保存到文件中。通过配置、编写爬虫代码、定义数据模型和数据处理管道,你可以灵活地构建各种爬虫应用。
217 0
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
|
12月前
|
开发框架 移动开发 前端开发
如何使用C#和HTMLAgilityPack抓取网页
HTMLAgilityPack是一款备受欢迎的用于解析和操作HTML文档的库。在使用之前,开发者需要考虑一些优缺点。下面是一些值得注意的优点: 1. 强大的错误容忍性 2. 灵活的API 3. 广泛的应用场景 然而,也有一些缺点需要考虑: 1. 性能问题 2. 对最新HTML特性的支持限制 3. 可能存在依赖和冲突
|
12月前
|
数据采集
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
244 0
|
前端开发 JavaScript API
Flutter(六)之豆瓣电影列表
学习完列表渲染后,我打算做一个综合一点的练习小项目:豆瓣Top电影排行列表;
190 0
Flutter(六)之豆瓣电影列表
|
JSON 数据格式 Python
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
|
Web App开发 JSON 数据格式
Requests库+正则爬取猫眼电影Top100
声明:此篇文章主要是观看静觅教学视频后做的笔记,原教程地址:https://cuiqingcai.com/ 流程框架 1.抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。
1262 0