欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

.NET快速實現網頁數據抓取

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

前言

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

注意:為了自身安全請在國家法律允許范圍內開發網頁爬蟲功能。

網頁數據抓取需求

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

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

創建控制臺應用

創建名為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

網頁數據抓取的業務邏輯都在這里面。

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>();

                // 網頁數據解析

                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執行數據抓取

namespace DotnetSpiderExercise

{

    public class Program

    {

        static async Task Main(string[] args)

        {

            Console.WriteLine("網頁數據抓取開始...");


            await RecommendedRankingSpider.RunAsync();


            Console.WriteLine("網頁數據抓取完成...");

        }

    }

}

 

抓取數據和頁面數據對比

抓取數據

 

頁面數據

 




項目源碼地址

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

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

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


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


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