C#轻松抓取网页文件下载

    表妹上高三了,需要在某网站上下载试卷刷题,通常每周日回家需要下载某些名校的N套题,然后筛选部分后打印再带回寝室。她把下载的这个任务交给了小编,小编也不想动手点击,幸好小编学过几天编程,于是想用程序的方式解决这个问题,首先要解决的是通过列表获取下载地址,这步骤已经解决了,就是通过HttpClient读取页面的内容通过正则表达式匹配列表的下载链接然后自动下载,但是遇到问题,HttpClient貌似不能直接在程序中下载文件。于是就查到用文件流的方式来读取,具体怎么实现,本文将分享出来。

准备工作

这里我们拿微软官方下载文件.NET7来做例子,首先找到网址:

https://dotnet.microsoft.com/zh-cn/download

然后找到下载地址,点击下载后在浏览器的下载内容中复制下载地址:

https://download.visualstudio.microsoft.com/download/pr/5b9d1f0d-9c56-4bef-b950-c1b439489b27/b4aa387715207faa618a99e9b2dd4e35/dotnet-sdk-7.0.100-win-x64.exe

在实际的开发环境中,可以请求后用正则表达式批量抓取。

编写代码

const int BufferSize = 8192;// 定义缓存大小,8192 字节
  static readonly HttpClient _httpClient = new HttpClient();//用单例创建http请求
        /// <summary>
        /// 从网页上下载文件并保存到指定目录
        /// </summary>
        /// <param name="url">文件下载地址</param>
        /// <param name="directoryName">文件下载目录</param>
        /// <param name="fileName">不包括扩展名</param>
        /// <returns>下载是否成功</returns>
        static async Task<bool> DownloadFile(string url, string directoryName, string fileName)
        {
              bool sign = true;
              try
            {
                HttpResponseMessage response = await _httpClient.GetAsync(url);
                using (Stream stream = await response.Content.ReadAsStreamAsync())
                {
                    //获取文件后缀
                    string extension = Path.GetExtension(response.RequestMessage.RequestUri.ToString());
                    using (FileStream fileStream = new FileStream($"{directoryName}/{fileName}{extension}", FileMode.CreateNew))
                    {
                        byte[] buffer = new byte[BufferSize];
                        int readLength = 0;
                        int length;
                        while ((length = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0)
                        {
                            readLength += length;
                            // 通过流写入到文件
                            fileStream.Write(buffer, 0, length);
                        }
                    }
                }
            }
            catch (IOException)
            {  //日志可以详细写
                sign = false;
                Console.WriteLine("请检查文件名是否重复或者超时!");
            }
            return sign;
        }

调用:

我们用main方法来模拟调用

static void Main(string[] args)
        {   //获取的url地址
            string down = "https://download.visualstudio.microsoft.com/download/pr/5b9d1f0d-9c56-4bef-b950-c1b439489b27/b4aa387715207faa618a99e9b2dd4e35/dotnet-sdk-7.0.100-win-x64.exe";
            string path = AppDomain.CurrentDomain.BaseDirectory + "//Files";
            if (!Directory.Exists(path))
            { Directory.CreateDirectory(path); }
            string filename = System.IO.Path.GetFileName(down);
            //由于main方法不是异步方法,故调用需要.GetAwaiter().GetResult(),正常不建议这么做
            var rel=  DownloadFile(down, path, filename).GetAwaiter().GetResult();
             Console.WriteLine(rel);
        }//返回true

 可以在bin目录查看下载成功了

fce92639a81eac34e2318a4007b83125.png

结语

本案例实现了用程序下载文件的例子,使用了HttpClient请求,获取内容后通过文件流来保存文件。本案例仅供参考,程序猿的你有啥更好的方法吗?文笔水平有限,欢迎留言或提出异议。

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。


技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
轻松C#(图解版)》完整扫描版================================================================ 基本信息 作者:谷涛、扶晓、毕国锋 丛书名:轻松开发 出版社:电子工业出版社 ISBN:978-7-121-20223-0 出版日期:2013年6月 开本:16开 页码:408页 版次:1-1 定价:¥55.00 所属分类:计算机 > 软件与程序设计 > C# ================================================================ 内容简介 本书由浅入深,全面、系统地介绍了C#程序设计。除了详细地讲解C#知识点外,本书还提供了大量的实例,供读者实战演练。本书共分三篇。第一篇是C#概述篇,主要介绍的是Visual Studio 2012的开发环境及搭建。第二篇是面向对象基础篇,主要介绍类、对象、字段、方法、流程控制、数组、继承、属性、运算符重载、接口等C#基本内容。第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、预处理器、程序集、运行时类型标识、反射、特性、泛型、LINQ和数据库开发等。 ================================================================ 图书目录 第一篇 C#概述篇 第1章 C#入门 2 1.1 C#概述 2 1.1.1 C#的发展 2 1.1.2 C#开发的基础 2 1.2 搭建开发环境 3 1.2.1 Visual Studio 2012软硬件配置要求 3 1.2.2 下载Visual Studio 2012 3 1.2.3 安装Visual Studio 2012 4 1.2.4 初始化配置 7 1.3 第一个程序—Hello World 8 1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释 19 2.3 定义类 20 2.4 实例化对象 20 2.5 小结 20 2.6 习题 21 第3章 定义类——字段 23 3.1 数据类型 23 3.1.1 简单值类型 23 3.1.2 值的表示——字面量 26 3.1.3 转义序列 27 3.2 定义字段 27 3.2.1 定义字段 28 3.2.2 静态字段和实例字段的访问 28 3.2.3 字段初始化 29 3.2.4 字段的动态赋值——Read()和ReadLine() 31 3.2.5 字段输出 31 3.2.6 格式化输出 32 3.2.7 数据类型转换 39 3.2.8 只读字段 41 3.2.9 访问控制 41 3.3 运算符 43 3.3.1 算术运算符 43 3.3.2 自增、自减运算符 44 3.3.3 复合赋值运算符 45 3.3.4 位运算符 46 3.3.5 sizeof运算符 47 3.3.6 运算符的优先级 47 3.4 小结 49 3.5 习题 49 第4章 定义类——方法 51 4.1 方法的概述 51 4.1.1 定义方法 51 4.1.2 方法的调用 52 4.2 方法体的构成 53 4.2.1 局部变量 53 4.2.2 局部变量与字段同名的解决——this关键字 54 4.2.3 语句 55 4.2.4 全局变量 55 4.3 返回值 56 4.3.1 返回值类型 56 4.3.2 从方法返回 57 4.4 参数 58 4.4.1 参数的分类 58 4.4.2 引用参数(ref参数) 59 4.4.3 输出参数(out参数) 61 4.5 特殊的方法 62 4.5
.NET(发音为“点 内特”)是由微软公司推出的一种软件开发框架。它包括了一系列的工具、类库和语言,可以帮助开发人员创建和运行各种类型的应用程序。 C#(发音为“C sharp”)是一种现代的面向对象的编程语言,是.NET框架的主要语言之一。C#结合了C++和Java的语法特点,提供了更简洁、更安全的编程体验。 使用.NET框架和C#语言开发人员可以创建各种各样的应用程序,包括Web应用、桌面应用、移动应用和游戏等。它可以在Windows操作系统上运行,并且还可以通过Mono项目在其他平台上运行,如Linux和Mac。 .NET框架提供了许多功能强大的类库,这些类库可以大大简化开发过程。例如,它包括用于数据库访问、图形界面设计、网络编程和安全性等的类库。开发人员可以通过调用这些类库的方法和属性来实现所需的功能,而无需从头开始编写代码。 C#语言具有面向对象的特性,这使得开发人员可以使用类和对象来组织代码,实现封装、继承和多态等概念。这样可以使代码更易读、易维护,并且提高代码的重用性。 总之,.NET框架和C#语言开发人员提供了强大的工具和语言,使他们能够快速、高效地开发各种类型的应用程序。它们在业界广泛应用,并且有着庞大的开发者社区和资源支持。无论是初学者还是专业开发人员,都可以从受益,并且轻松地构建出优秀的软件应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值