.NET快速实现网页数据抓取

网页数据抓取需求

本文我们以抓取博客园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("网页数据抓取完成...");}}
}

抓取数据和页面数据对比

抓取数据

页面数据

文章转载自:追逐时光者

原文链接:https://www.cnblogs.com/Can-daydayup/p/18208192

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring security】【pig】Note01-pig登录验证过程

&#x1f338;&#x1f338; pig 登录验证 &#x1f338;&#x1f338; pig后端源码 一、大概执行顺序&#xff0c;便于理解 pig spring-security 二、配置过滤器 配置SecurityFilterChain 三、执行过程分析 请求拦截&#xff1a; 当客户端发送请求时&#xff0c;Sprin…

Kubernetes——Pod详解

目录 一、Pod基础概念 1.概念 2.使用方式 3.Pause容器 3.1网络 3.2存储 4.Pod容器分类 4.1自主式Pod 4.2控制器管理的Pod 二、Pod的分类 1.基础容器&#xff08;infrastructure container&#xff09; 2.初始化容器&#xff08;initcontainers&#xff09; 2.1Ini…

CR80清洁卡都能用在什么地方?

CR80清洁卡&#xff08;也被称为ISO 7810 ID-1清洁卡&#xff09;的规格确实使其在各种需要读取磁条或接触式智能卡的设备中都有广泛的用途。这些设备包括但不限于&#xff1a; ATM自动终端机&#xff1a;当ATM机的磁条读卡器出现故障或读卡不灵敏时&#xff0c;可以使用CR80清…

Python 渗透测试:MySQL 数据库 弱密码测试.(3306 端口)

什么是 MySQL 数据库 MySQL 是一种开源的关系型数据库管理系统(RDBMS)。它是目前世界上最流行的数据库之一,被广泛应用于各种类型的网站和应用程序中。MySQL 数据库爆破是一种非法和危险的黑客攻击手段。它指的是通过暴力猜测密码的方式,试图获取未授权访问 MySQL 数据库的行为…

【qt】下拉列表组件

下拉列表组件 一.Combo Box1.可以直接双击编辑下拉内容2.代码初始化下拉内容3.一次性添加多个下拉内容4.下拉框手动编辑5.下拉内容添加附加值6.下拉添加图标7.获取下拉值 二.总结 一.Combo Box 还是老样子&#xff0c;咱们边做边练 目标图&#xff1a; 1.可以直接双击编辑下…

存储+调优:存储-Cloud

存储调优&#xff1a;存储-Cloud Master Server 配置&#xff1a; IP192.168.1.254 useradd mfs tar zxf mfs-1.6.11.tar.gz.gz cd mfs-1.6.11 ./configure --prefix/usr --sysconfdir/etc --localstatedir/var/lib --with-default-usermfs --with-default-groupmfs --disabl…

掌握一个面试小心机,就业离你只差这一步!

马上进6月份&#xff0c;大家是已经在工作岗位上了&#xff0c;还是正在面试呀&#xff01;不知道大家在面试过程中有没有遇到这样的问题&#xff0c;面试完几家公司之后进行总结&#xff0c;还是不知道自己为什么被pass掉&#xff0c;今天小编带大家搞清测试岗位面试的底层逻辑…

成为领导心腹:测试新人如何提高影响力?

作为一名新入行的测试人员&#xff0c;如何提高自己在工作中的影响力呢&#xff1f; 可能有人会问了&#xff1a;“测试人员不是只要安分守己的做好自己的测试工作不就行了吗&#xff1f;又不是当管理者&#xff0c;为什么要提高影响力呢&#xff1f;” 说实话&#xff0c;我…

【C++】学习笔记——二叉搜索树

文章目录 十四、二叉搜索树1. 二叉搜索树的概念2. 二叉搜索树的实现查找插入中序遍历删除拷贝构造析构函数赋值重载完整代码 3. 二叉搜索树的应用K搜索模型KV搜索模型 未完待续 十四、二叉搜索树 1. 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

同旺科技 FLUKE ADPT 隔离版发布 ---- 2

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B 正面&#xff1a; 反面&#xff1a; 侧面&#xff1a; 开孔位置&#xff08;可…

面试八股之MySQL篇4——事务篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

react组件中的共享数据

在前面的示例中&#xff0c;每个 MyButton 都有自己独立的 count&#xff0c;当每个按钮被点击时&#xff0c;只有被点击按钮的 count 才会发生改变&#xff1a; 然而&#xff0c;你经常需要组件 共享数据并一起更新。 为了使得 MyButton 组件显示相同的 count 并一起更新&…

四川邮电职院领导访知了汇智,深化AI专业教育与行业对接

5月16日&#xff0c;四川邮电职业技术学院信息工程学院软件教研室的领导团队莅临我司&#xff0c;就人工智能专业建设进行深入的交流与学习。我司总经理、副总经理等高层领导亲自接待&#xff0c;对学院领导一行的到来表示了热烈的欢迎&#xff0c;并全程陪同参观了公司的核心区…

【技术实操】中标麒麟高级服务器操作系统实例分享,rsync数据同步配置方案

1.rsync介绍 rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份工具。 在守护进程模式&#xff08;daemon mode&#xff09;下&#xff0c;rsync默认监听TCP端口873&#xff0c;以原生rsync传输协议或者通过远程shell如RSH或者SSH提供文件。SS…

基于BERT的中文情感分析实战

数据与代码链接见文末 bert开源项目解读:谷歌开源项目BERT源码解读与应用实例-CSDN博客 基于BERT的中文命名实体识别识别实战:基于BERT的中文命名实体识别识别实战-CSDN博客 1.数据 在data目录下,提供了中文情感分析的数据, 类别1代表正向情感,类别2代表负向情感。

金融信贷风控基础知识

一、所谓风控(What && Why) 所谓风控&#xff0c;可以拆解从2个方面看&#xff0c;即 风险和控制 风险(what) 风险 这里狭隘的特指互联网产品中存在的风险点&#xff0c;例如 账户风险 垃圾注册账号账号被泄露盗用 交易支付风险 刷单&#xff1a;为提升卖家店铺人气…

DETR原理分析

TransformerDetection&#xff1a;引入视觉领域的首创DETR 论文名称&#xff1a;End-to-End Object Detection with Transformers 论文地址&#xff1a;https://arxiv.org/abs/2005.12872 重要的图要经常出现&#xff0c;下图就是&#xff1a; DETR原理分析 网络架构部分解读…

UNI-APP设置屏幕保持常亮-不熄灭屏幕

前言 最近在实际开发过程中&#xff0c;我们会发现在自己使用的app当中会根据系统无操作熄灭屏幕对于一下需要长时间保持屏幕的业务就很不友好&#xff0c;uni-app也是提供了相应方法加上代码之后-注意app端没报错-不生效就是权限问题-需要设置相对应权限-打自定义包 代码实现…

【BSP开发经验】用户态栈回溯技术

前言 在内核中有一个非常好用的函数dump_stack, 该函数在我们调试内核的过程中可以打印出函数调用关系&#xff0c;该函数可以帮助我们进行内核调试&#xff0c;以及让我们了解内核的调用关系。同时当内核发生崩溃的时候就会自己将自己的调用栈输出到串口。 栈回溯非常有利于我…

溪谷联运SDK功能全面解析

近期&#xff0c;备受用户关注的手游联运10.0.0版本上线了&#xff0c;不少用户也选择了版本更新&#xff0c;其中也再次迎来了SDK的更新。溪谷软件和大家一起盘点一下溪谷SDK的功能都有哪些吧。 一、溪谷SDK具有完整的运营功能和高度扩展性 1.登录&#xff1a;登录是SDK最基础…