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

在理论的编码过程中,找到了一个好的类库“HtmlAgilityPack”。
介绍:
官网:http://html-agility-pack.net/...
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();    }