C#语言练手小功能

这篇具有很好参考价值的文章主要介绍了C#语言练手小功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

抓取网页上公开可见的图片。涉及知识点:

  1. 异步编程:async和await进行异步编程,将耗时的操作放在后台线程中进行,并使用await关键字等待操作完成,不阻塞主线程的执行。
  2. HttpClient:用来发送http请求,并获取响应。可以使用GetAsync发送Get请求,并使用ReadAsStringAsync方法将响应内容读取为字符串。
  3. HttpResponseMessage:http响应的消息,其中包含响应的状态码、头信息、内容等。使用IsSuccessStatusCode判断响应是否成功。
  4. HtmlAgilityPack库:用来解析HTML文档,使用LoadHtml方法从字符串中加载html内容,并创建HtmlDocument对象。使用Descendants方法获取指定标签元素。
  5. Linq查询:获取img元素进行筛选和转换,使用Select获取每个img元素的src属性值,并使用Where进行过滤。
  6. 图片下载:使用HttpClient.GetAsync方法下载图片,并使用ReadAsStreamAsync方法将下载的图片内容作为流进行处理。使用Path类获取图片文件名和指定保存路径,使用FileStream类创建文件流将图片保存到本地。
  7. 异常处理:try-catch
using HtmlAgilityPack;

public async void GetImagesFromWeb(string ip,string webPage)//ip,webPage:html网页 
        {
            string webUrl = ip+webPage;  //抓取图片的网页url
            string saveDir = "E:\\File_work\\files\\ResultSaveDir\\ImagesFromWeb";

            HttpClient httpClient = new HttpClient();

            try
            {
                //向指定url发送HttpGet请求,并返回一个表示http响应的httpResponseMessage对象
                HttpResponseMessage response =await httpClient.GetAsync(webUrl); //HttpResponseMessage包含了响应的状态码、头信息、内容等
                
                if (response.IsSuccessStatusCode)    //状态码为200-299,,则IsSuccessStatusCode属性为true
                {
                    string htmlContent=await response.Content.ReadAsStringAsync();//将http响应的内容作为字符串读取
                    //使用HtmlAgilityPack解析html文档
                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(htmlContent);//从字符串中加载html内容,并创建HtmlDocument对象

                    //获取img元素中的src属性,html中的img元素用于向网页中插入图像,src属性制定了要显示的图片文件的url
                    var imageUrls = doc.DocumentNode.Descendants("img")  //从根节点开始获取所有的img标签
                        .Select(img => img.GetAttributeValue("src", null))//获取每个img的src属性值
                        .Where(src => !string.IsNullOrEmpty(src));
                    foreach(var imgUrl in imageUrls)
                    {
                        try
                        {
                            HttpResponseMessage imgResponse=await httpClient.GetAsync(ip+imgUrl);
                            if (imgResponse.IsSuccessStatusCode)
                            {
                                Stream imgStream=await imgResponse.Content.ReadAsStreamAsync();
                                //获取图片文件名
                                string imgName = Path.GetFileName(imgUrl);
                                //指定保存路径
                                string savePath = Path.Combine(saveDir, imgName);

                                FileStream fileStream = new FileStream(savePath,FileMode.Create);
                                await imgStream.CopyToAsync(fileStream);
                            }
                            else
                            {
                                Console.WriteLine($"图片下载失败: {imgUrl}. 状态码: {imgResponse.StatusCode}");
                            }
                        }
                        catch(Exception ex)
                        {
                            Console.WriteLine($"图片下载出错: {imgUrl}: {ex.Message}");
                        }
                    }
                    Console.WriteLine($"{imageUrls.Count()} 图片下载成功.");
                }
                else
                {
                    Console.WriteLine($"页面请求失败. 错误码: {response.StatusCode}");
                }
            }

            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

文章来源地址https://www.toymoban.com/news/detail-821678.html

到了这里,关于C#语言练手小功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C#语言的GUI开发,主要介绍WPF框架

    下面是几种常见基于.Net的界面开发框架,都是Microsoft提供,下面简介由GPT生成 WinForms (Windows Forms WPF (Windows Presentation Foundation) UWP (Universal Windows Platform) MAUI (Multi-platform App UI) WinForms(Windows Forms): 介绍: WinForms是由Microsoft提供的用于开发Windows桌面应用程序的UI框架。它使用简单

    2024年02月03日
    浏览(42)
  • asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

    一、源码特点         asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题),系统采用mvc模式(BLL+DAL+ENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 月下逢古代服饰系统1 二、功能

    2024年02月07日
    浏览(48)
  • Linux下 C语言路由器项目(纯C 1K代码,适合练手,也可写在简历上面 )

    主机: Ubuntu: 设置网络: 实践: 主机与虚拟机相互ping 成功: 开发板与主机相互ping 失败:(因为是不同网段) ok,完成 最后,运行我们写的路由器代码后,主机与开发板可以在不同网段下通信 开发板与主机相互ping 成功: 1.默认网关有问题,导致开发板ping不通wind主机,

    2024年02月07日
    浏览(36)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)
  • c语言练手项目【编写天天酷跑游戏2.0】EASYX图形库的运用。代码开源,素材已打包

    素材加Q群:723550115 项目是基于Windows,easyX图形库进行开发的, 开发环境:Visual Studio 2022 项目技术最低要求: 常量,变量,数组,循环,函数。 使用initgraph()初始化界面; 加载背景资源 写好游戏的图像化界面的框架 由于easyX不支持透明图片的的贴图,所以我们要自己写一个

    2024年02月15日
    浏览(47)
  • UG\NX二次开发 使用录制功能录制操作记录时,如何设置默认的开发语言?

    文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,CC++,Qt-CSDN博客 NX二次开发使用BlockUI设计对话框时,如何设置默认的代码语言?   依次打开“文件”-“实用工具”-“用户默认设置”-“用户界面”-“操作记录”-“C++”。       

    2024年02月11日
    浏览(41)
  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(49)
  • C#进阶-实现邮箱收发功能

    在C#中,发送邮件是一项常见的任务,通常用于实现自动化通知、报警和与用户进行交互等场景。C#提供了多种发送邮件的方式,主要方式包括SMTP协议、POP3协议、IMAP协议、Exchange服务器等。使用这些方式,开发人员可以灵活地发送和接收邮件,满足各种应用场景的需求。 下表

    2024年04月15日
    浏览(29)
  • C#实现支付宝转账功能

    .net 6 AlipaySDKNet.OpenAPI 2.4.0 登录支付宝开放平台https://open.alipay.com/ 进入控制台 授权回调地址也设置一下,加密方式AES 证书除了java都需要自己生成一下pkcs1的密钥 privatekey.txt就是根据应用私钥生成的pkcs1密钥 安装AlipaySDKNet.OpenAPI 2.4.0 配置json 新建AliPayConfigModel.cs 实现方法

    2024年02月04日
    浏览(37)
  • C#鼠标穿透功能(WinForm)

    在WinForm开发时,会用到这样一个场景,给屏幕增加水印Logo,但不影响画面的操作。这里就会用到鼠标穿透功能。 要想实现鼠标穿透功能,需要用到User32.Dll的几个函数:SetWindowLong、GetWindowLong、SetLayeredWindowAttributes。 SetWindowLong 语法规则 描述 :更改指定窗口的属性。 函数还将

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包