狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

.NET快速實現(xiàn)網(wǎng)頁數(shù)據(jù)抓取

freeflydom
2024年5月25日 11:18 本文熱度 1038

前言

今天我們來講講如何使用.NET開源(MIT License)的輕量、靈活、高性能、跨平臺的分布式網(wǎng)絡(luò)爬蟲框架DotnetSpider來快速實現(xiàn)網(wǎng)頁數(shù)據(jù)抓取功能。

注意:為了自身安全請在國家法律允許范圍內(nèi)開發(fā)網(wǎng)頁爬蟲功能。

網(wǎng)頁數(shù)據(jù)抓取需求

本文我們以抓取博客園10天推薦排行榜第一頁的文章標題、文章簡介和文章地址為示例,并把抓取下來的數(shù)據(jù)保存到對應的txt文本中。

請求地址:https://www.cnblogs.com/aggsite/topdiggs

創(chuàng)建控制臺應用

創(chuàng)建名為DotnetSpiderExercise的控制臺應用。



安裝DotnetSpider NuGet包

NuGet包管理器搜索:DotnetSpider

 

添加Serilog日志組件

NuGet包管理器搜索:Serilog.AspNetCore

 


添加RecommendedRankingModel

namespace DotnetSpiderExercise

{

    public class RecommendedRankingModel

    {

        /// <summary>

        /// 文章標題

        /// </summary>

        public string ArticleTitle { get; set; }


        /// <summary>

        /// 文章簡介

        /// </summary>

        public string ArticleSummary { get; set; }


        /// <summary>

        /// 文章地址

        /// </summary>

        public string ArticleUrl { get; set; }

    }

}

添加RecommendedRankingSpider

網(wǎng)頁數(shù)據(jù)抓取的業(yè)務邏輯都在這里面。

using DotnetSpider.DataFlow.Parser;

using DotnetSpider.DataFlow;

using DotnetSpider.Downloader;

using DotnetSpider.Http;

using DotnetSpider.Scheduler.Component;

using DotnetSpider.Selector;

using DotnetSpider;

using Microsoft.Extensions.Logging;

using Microsoft.Extensions.Options;

using Serilog;

using DotnetSpider.Scheduler;

using Microsoft.Extensions.Hosting;

using System.Reflection;


namespace DotnetSpiderExercise

{

    public class RecommendedRankingSpider : Spider

    {

        public RecommendedRankingSpider(IOptions<SpiderOptions> options,

            DependenceServices services,

            ILogger<Spider> logger) : base(options, services, logger)

        {

        }


        public static async Task RunAsync()

        {

            var builder = Builder.CreateDefaultBuilder<RecommendedRankingSpider>();

            builder.UseSerilog();

            builder.UseDownloader<HttpClientDownloader>();

            builder.UseQueueDistinctBfsScheduler<HashSetDuplicateRemover>();

            await builder.Build().RunAsync();

        }


        protected override async Task InitializeAsync(CancellationToken stoppingToken = default)

        {

            //添加自定義解析

            AddDataFlow(new Parser());

            //使用控制臺存儲器

            AddDataFlow(new ConsoleStorage());

            //添加采集請求:博客園10天推薦排行榜

            await AddRequestsAsync(new Request("https://www.cnblogs.com/aggsite/topdiggs")

            {

                //請求超時10秒

                Timeout = 10000

            });

        }


        class Parser : DataParser

        {

            public override Task InitializeAsync()

            {

                return Task.CompletedTask;

            }


            protected override Task ParseAsync(DataFlowContext context)

            {

                var recommendedRankingList = new List<RecommendedRankingModel>();

                // 網(wǎng)頁數(shù)據(jù)解析

                var number = 1;

                var recommendedList = context.Selectable.SelectList(Selectors.XPath(".//article[@class='post-item']"));

                foreach (var news in recommendedList)

                {

                    var articleTitle = news.Select(Selectors.XPath(".//a[@class='post-item-title']"))?.Value;

                    var articleSummary = news.Select(Selectors.XPath(".//p[@class='post-item-summary']"))?.Value?.Replace("\n", "").Replace(" ", "");

                    var articleUrl = news.Select(Selectors.XPath(".//a[@class='post-item-title']/@href"))?.Value;


                    Console.WriteLine($"第{number}篇文章 標題:{articleTitle}");


                    recommendedRankingList.Add(new RecommendedRankingModel

                    {

                        ArticleTitle = articleTitle,

                        ArticleSummary = articleSummary,

                        ArticleUrl = articleUrl

                    });


                    number++;

                }


                using (StreamWriter sw = new StreamWriter("RecommendedRanking.txt"))

                {

                    foreach (RecommendedRankingModel model in recommendedRankingList)

                    {

                        string line = $"文章標題:{model.ArticleTitle}\r\n文章簡介:{model.ArticleSummary}\r\n文章地址:{model.ArticleUrl}";

                        sw.WriteLine(line + "\r\n ========================================================================================== \r\n");

                    }

                }

                return Task.CompletedTask;

            }

        }

    }

}


Program執(zhí)行數(shù)據(jù)抓取

namespace DotnetSpiderExercise

{

    public class Program

    {

        static async Task Main(string[] args)

        {

            Console.WriteLine("網(wǎng)頁數(shù)據(jù)抓取開始...");


            await RecommendedRankingSpider.RunAsync();


            Console.WriteLine("網(wǎng)頁數(shù)據(jù)抓取完成...");

        }

    }

}

 

抓取數(shù)據(jù)和頁面數(shù)據(jù)對比

抓取數(shù)據(jù)

 

頁面數(shù)據(jù)

 




項目源碼地址

GitHub源碼地址:https://github.com/dotnetcore/DotnetSpider

GitHub wiki:https://github.com/dotnetcore/DotnetSpider/wiki

本文示例源碼:https://github.com/YSGStudyHards/DotNetExercises/tree/master/DotnetSpiderExercise


轉(zhuǎn)自:https://www.cnblogs.com/Can-daydayup/p/18208192 作者:追逐時光者


該文章在 2024/5/25 11:18:13 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關(guān)報表等業(yè)務管理,結(jié)合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved