网站首页 > 精选文章 正文
那是一个风和日丽的周一,老板走到我桌前,神秘兮兮地说:“我们需要一个爬虫程序,你来搞个爬虫吧!你能不能用C#写一个爬虫程序?
“C#爬虫?”我瞪大了眼睛,“老板,你确定不是开玩笑?这好像不合规定的”。
老板一听,笑了:“别害怕!是我们自己的网站有的内容需要定时保存下来,一页页的保存太麻烦了,有没有办法自动保留有用的信息?你行吗?”
“那我试试吧!”,嘴上这么说,心里却想:“这不是小菜一碟吗?这是我大展身手的时候了,哈哈!”
下面我来讲一下我怎么实现的,内容太多,我分几次分别讲解,今天先讲如何获取页面代码的,后面再讲如何处理页面内容的。
首先我们要用到的核心是:HttpClient类
HttpClient 是 .NET Framework 和 .NET Core 中的一个类,位于 System.Net.Http 命名空间下。
它提供了一种简单且强大的方式来发送 HTTP 请求和接收 HTTP 响应,
支持 GET、POST、PUT、DELETE 等多种 HTTP 方法,
并能处理 JSON、XML 及其他内容类型的数据。
由于头条写文章限制各种字符,我只好把有的介绍放到代码块中了。
编写代码创建实例:
编写代码创建了一个静态的 HttpClient 实例:
static readonly HttpClient client = new HttpClient();//它使用了底层的网络连接
//readonly关键字确保这个实例在创建后不会被修改
//static关键字使得这个实例在类的所有方法中都是可用的。
第二个重要代码是:
static async Task<string> GetFileContentAsync(string url)
{
HttpResponseMessage response = await client.GetAsync(url);
string content = await response.Content.ReadAsStringAsync();
return content;
}
//static async Task<string> GetFileContentAsync(string url) 是一个异步方法,用于下载文件内容。
//它使用HttpClient的GetAsync方法发起GET请求,然后使用ReadAsStringAsync方法异步地读取
//响应内容,并返回这个内容。
最后调用代码就可以了:
try
{
string fileContent = await GetFileContentAsync(url);
Console.WriteLine(fileContent);
}
catch (HttpRequestException)
{
Console.WriteLine("无法下载文件,请检查网络连接或URL是否正确。");
}
catch (Exception ex)
{
Console.WriteLine(#34;发生错误: {ex.Message}");
}
//try 和 catch 块用于异常处理。如果下载过程中出现HttpRequestException(通常是网络问题),
//则会捕获这个异常并提示用户检查网络连接或URL。
//如果出现其他类型的异常,也会被捕获并显示错误信息。
实现效果:
//由于 HttpClient 的方法是异步的(async),我们使用 await 关键字来等待操作完成,而不是阻塞线程。
//这种异步编程模式在 .NET 中非常普遍,特别是在与 I/O 相关的操作中,如网络请求。
//HttpClient 还支持其他类型的 HTTP 请求,如 POST、PUT、DELETE 等,
//通过调用相应的方法(如 PostAsync、PutAsync、DeleteAsync)
//并传递必要的请求内容(如 JSON、表单数据等)即可。
这个代码优点明显:
异步处理:使得程序能够非阻塞地执行网络请求。这提高了应用程序的响应性和性能。
资源复用:创建一个静态的实例,在整个应用程序生命周期内共享使用。
异常处理:对可能出现的错误进行了适当的捕获和处理。
简洁易读:代码结构清晰,逻辑简单明了,易于理解和维护。
模块化设计:将获取网页内容的任务封装在独立的 方法中利于代码重用和逻辑组织。
需要完整代码的请关注留言。欢迎和我交流提出更好的建议。
- 上一篇: 异步编程系列第04章 编写Async方法
- 下一篇: 一文看懂Python中异步、进程、线程、队列
猜你喜欢
- 2025-04-30 干货|三相异步电动机绕组故障分析和处理、附表!
- 2025-04-30 异步爬虫进阶:使用asyncio和aiohttp实现高效异步爬取
- 2025-04-30 奇奇怪怪,单相双值电容电动机接线,大神也会被绊倒
- 2025-04-30 PHP 8.1新功能初探:添加Enums, Fsync和Fibers等 正式版11月发布
- 2025-04-30 异步fifo设计及时序约束设置(异步fifo结构图)
- 2025-04-30 Rust异步HTTP全攻略:reqwest库的最佳实践
- 2025-04-30 图片异步延迟加载,提升网页打开速度
- 2025-04-30 PHP如何并行异步处理HTTP请求(php异步调用)
- 2025-04-30 Python异步编程:3小时从入门到实战,让你的程序快如闪电!
- 2025-04-30 聊一下 gRPC 的 C++ 异步编程(grpc 异步流模式)
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)