前言:说到爬虫,基本上清一色的都知道用Python,但是对于一些没玩过或者不想玩Python的来说,却比较头大一点。所以以下我站在C# 的角度,来写一个简单的Demo,用来演示C# 实现的简单小爬虫。大家感兴趣可以自己拓展出更加丰富的爬虫功能。
前提:引用包HtmlAgilityPack
先来个爬取文本。
新建一个文本处理的方法,用于处理爬取的文本数据,并写入到指定文件夹内的text.txt文件内

staticasyncTaskProcessText(HtmlDocument doc,stringtextDir){vartextNodes = doc.DocumentNode.SelectNodes("//*[text()]");if(textNodes !=null){StringBuilder allText =newStringBuilder();foreach(HtmlNode nodeintextNodes.Where(node => !string.IsNullOrWhiteSpace(node.InnerText))){stringtextContent = WebUtility.HtmlDecode(node.InnerText.Trim());if(!string.IsNullOrWhiteSpace(textContent)){allText.AppendLine(textContent);}}stringfilePath = Path.Combine(textDir,"text.txt");awaitFile.WriteAllTextAsync(filePath, allText.ToString());}}
新增一个网页处理方法,用于传入网址进行抓取网页数据,并传给以上的文本处理方法进行解析文本数据,保存到当前根目录下的Texts文件夹内

以我两天前写的博客内容为例,进行抓取。博客地址为:https://www.cnblogs.com/weskynet/p/18213135

Main里面调用有关方法,进行爬取。

说明:添加 User-Agent 头部信息可以帮助模拟常规的浏览器请求,避免被目标服务器拒绝。
看下我当前的根目录:

运行完毕,多出Texts文件夹

文件夹内多出程序里面写定的text.txt文件

打开文本文件,可以看到文章全部内容,以及所有文本都被抓取下来了。

同文本处理,咱再新增一个图片处理方法:

staticasyncTaskProcessImages(HtmlDocument doc,string Url,stringimagesDir){varimageNodes = doc.DocumentNode.SelectNodes("//img[@src]");if(imageNodes !=null){foreach(HtmlNode imageNodeinimageNodes){stringimageUrl = imageNode.GetAttributeValue("src",null);imageUrl = EnsureAbsoluteUrl( Url, imageUrl);stringfileName = Path.GetFileName(newUri(imageUrl).LocalPath);stringlocalPath = Path.Combine(imagesDir, fileName);byte[] imageBytes =awaitclient.GetByteArrayAsync(imageUrl);awaitFile.WriteAllBytesAsync(localPath, imageBytes);}}}
网页爬取方法里面把文本有关改成图片

以下是一个辅助方法,辅助方法用于处理相对URL,确保所有请求的URL是绝对的,防止资源加载失败。
staticstringEnsureAbsoluteUrl(string Url,stringurl){returnUri.IsWellFormedUriString(url, UriKind.Absolute) ? url :newUri(newUri( Url), url).AbsoluteUri;}
执行程序,执行完毕,根目录下新增Images文件夹

文件夹内会看到该网址的所有图片文件。
图片文件格式都会被抓取,可以根据自己需要进行过滤。如果是整个站点,可以根据循环进行获取每个页面的数据。
最后再提供一个视频爬取的代码,由于没找到可以爬取的站点,此处演示就不演示了,仅供代码出来给大家学习和技术分享使用。感兴趣的大佬可以自行尝试。

staticasyncTaskProcessVideos(HtmlDocument doc,string Url,stringvideosDir){varvideoNodes = doc.DocumentNode.SelectNodes("//video/source[@src]");if(videoNodes !=null){foreach(HtmlNode videoNodeinvideoNodes){stringvideoUrl = videoNode.GetAttributeValue("src",null);videoUrl = EnsureAbsoluteUrl( Url, videoUrl);stringvideoName = Path.GetFileName(newUri(videoUrl).LocalPath);stringvideoPath = Path.Combine(videosDir, videoName);byte[] videoBytes =awaitclient.GetByteArrayAsync(videoUrl);awaitFile.WriteAllBytesAsync(videoPath, videoBytes);}}}
如果以上代码还不能满足你的好奇心,想要我本地测试的源码demo
继续阅读与本文标签相同的文章
C#爬虫,让你不再觉得神秘
python爬虫之js逆向入门
-
五大网络威胁应对挑战
2026-05-14栏目: 教程
-
能“生”的机器人,这不是玩笑!这只是机器拟人化的一小步
2026-05-14栏目: 教程
-
辉煌的背后,华为何时补齐短板?任正非给出新目标
2026-05-14栏目: 教程
-
全球首条“5G自动微公交”示范线路乌镇开通
2026-05-14栏目: 教程
-
未来十年,最为吃香的4个大学专业,毕业后就是香饽饽!
2026-05-14栏目: 教程
