AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

我們一起聊聊.NET快速實現網頁數據抓取

來源: 責編: 時間:2024-05-23 08:32:08 156觀看
導讀前言今天我們來講講如何使用.NET開源(MIT License)的輕量、靈活、高性能、跨平臺的分布式網絡爬蟲框架DotnetSpider來快速實現網頁數據抓取功能。注意:為了自身安全請在國家法律允許范圍內開發網頁爬蟲功能。網頁數據抓

前言

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

注意:為了自身安全請在國家法律允許范圍內開發網頁爬蟲功能。oMK28資訊網——每日最新資訊28at.com

網頁數據抓取需求

本文我們以抓取博客園10天推薦排行榜第一頁的文章標題、文章簡介和文章地址為示例,并把抓取下來的數據保存到對應的txt文本中。oMK28資訊網——每日最新資訊28at.com

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

圖片圖片oMK28資訊網——每日最新資訊28at.com

創建控制臺應用

創建名為DotnetSpiderExercise的控制臺應用。oMK28資訊網——每日最新資訊28at.com

圖片圖片oMK28資訊網——每日最新資訊28at.com

圖片圖片oMK28資訊網——每日最新資訊28at.com

圖片圖片oMK28資訊網——每日最新資訊28at.com

安裝DotnetSpider NuGet包

NuGet包管理器搜索:DotnetSpideroMK28資訊網——每日最新資訊28at.com

圖片圖片oMK28資訊網——每日最新資訊28at.com

添加Serilog日志組件

NuGet包管理器搜索:Serilog.AspNetCoreoMK28資訊網——每日最新資訊28at.com

圖片圖片oMK28資訊網——每日最新資訊28at.com

添加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

網頁數據抓取的業務邏輯都在這里面。oMK28資訊網——每日最新資訊28at.com

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("網頁數據抓取完成...");        }    }}

圖片圖片oMK28資訊網——每日最新資訊28at.com

抓取數據和頁面數據對比

抓取數據

圖片圖片oMK28資訊網——每日最新資訊28at.com

頁面數據

圖片圖片oMK28資訊網——每日最新資訊28at.com

項目源碼地址

更多項目實用功能和特性歡迎前往項目開源地址查看

本文鏈接:http://www.tebozhan.com/showinfo-26-90186-0.html我們一起聊聊.NET快速實現網頁數據抓取

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 快手一季度營收 294 億元同比增長 16.6%,平均日活躍用戶達 3.94 億

下一篇: Rust 上手很難?搞懂這些知識,前端開發能快速成為 Rust 高手

標簽:
  • 熱門焦點
Top