1.HtmlAgilityPack 爬取优酷电影名

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 爬虫的制作主要分为三个方面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();
    }
目录
相关文章
|
29天前
|
数据挖掘 Python
DrissionPage实战之采集猫眼电影top100榜
在信息化时代,数据的重要性日益凸显,特别是在充满活力的电影行业。猫眼电影作为中国领先的电影票务平台,提供了丰富的电影信息和用户评价,成为研究电影市场趋势的重要数据源。通过Python的DrissionPage库抓取猫眼电影Top 100榜单,不仅能够帮助影迷了解热门影片,还为制片方、市场分析师和投资者提供了宝贵的市场洞察。此项目通过自动化脚本定期更新数据,分析市场变化,助力精准决策。
55 0
|
JavaScript 大数据 应用服务中间件
Python网络爬虫(JSON, Phantomjs, selenium/Chromedirver,豆瓣电影、斗鱼直播、京东商城爬取)
python、python爬虫、网络爬虫、爬虫框架、selenium、requests、urllib、数据分析、大数据、爬虫爬取静态网页、爬虫基础、自动化测试、json、动态加载、反爬虫
3535 0
|
2月前
|
数据采集 开发者
爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数
爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数
118 0
|
6月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影详情内容爬虫详解和源码
这是一个Python爬虫程序,用于抓取豆瓣电影详情页面如`https://movie.douban.com/subject/1291560/`的数据。它首先发送GET请求,使用PyQuery解析DOM,然后根据`&lt;br&gt;`标签分割HTML内容,提取电影信息如导演、演员、类型等,并将中文键转换为英文键存储在字典中。完整代码包括请求、解析、数据处理和测试部分。当运行时,会打印出电影详情,如导演、演员列表、类型、时长等。
124 1
 (2024)豆瓣电影详情内容爬虫详解和源码
|
6月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
304 3
|
数据采集 XML 存储
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
这个案例展示了如何使用 Scrapy 框架构建一个简单的爬虫项目,从网页中提取数据并保存到文件中。通过配置、编写爬虫代码、定义数据模型和数据处理管道,你可以灵活地构建各种爬虫应用。
325 0
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
|
数据采集
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
318 0
|
前端开发 JavaScript API
Flutter(六)之豆瓣电影列表
学习完列表渲染后,我打算做一个综合一点的练习小项目:豆瓣Top电影排行列表;
219 0
Flutter(六)之豆瓣电影列表
|
数据采集 JSON 安全
竟然如此简单!输入明星名字就可以直接爬取高清图片
**听说你在自己喜欢的明星壁纸?比如李易峰,王一博,易烊千玺、王源、王俊凯,李现等。今天教你批量下载这些明星高清壁纸****(文末有福利)**
475 0