经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
谁说爬虫只能Python?看我用C#快速简单实现爬虫开发和演示!
来源:cnblogs  作者:WeskyNet  时间:2024/5/29 9:12:29  对本文有异议

前言:说到爬虫,基本上清一色的都知道用Python,但是对于一些没玩过或者不想玩Python的来说,却比较头大一点。所以以下我站在C# 的角度,来写一个简单的Demo,用来演示C# 实现的简单小爬虫。大家感兴趣可以自己拓展出更加丰富的爬虫功能。

前提:引用包HtmlAgilityPack 

先来个爬取文本。

新建一个文本处理的方法,用于处理爬取的文本数据,并写入到指定文件夹内的text.txt文件内

0
 
  1. static async Task ProcessText(HtmlDocument doc, string textDir)
  2. {
  3. var textNodes = doc.DocumentNode.SelectNodes("//*[text()]");
  4. if (textNodes != null)
  5. {
  6. StringBuilder allText = new StringBuilder();
  7. foreach (HtmlNode node in textNodes.Where(node => !string.IsNullOrWhiteSpace(node.InnerText)))
  8. {
  9. string textContent = WebUtility.HtmlDecode(node.InnerText.Trim());
  10. if (!string.IsNullOrWhiteSpace(textContent))
  11. {
  12. allText.AppendLine(textContent);
  13. }
  14. }
  15. string filePath = Path.Combine(textDir, "text.txt");
  16. await File.WriteAllTextAsync(filePath, allText.ToString());
  17. }
  18. }

 

 
新增一个网页处理方法,用于传入网址进行抓取网页数据,并传给以上的文本处理方法进行解析文本数据,保存到当前根目录下的Texts文件夹内
0
以我两天前写的博客内容为例,进行抓取。博客地址为:https://www.cnblogs.com/weskynet/p/18213135
0
Main里面调用有关方法,进行爬取。
0
说明:添加 User-Agent 头部信息可以帮助模拟常规的浏览器请求,避免被目标服务器拒绝。
看下我当前的根目录:
0
运行完毕,多出Texts文件夹
0
文件夹内多出程序里面写定的text.txt文件
0
打开文本文件,可以看到文章全部内容,以及所有文本都被抓取下来了。
0
 
同文本处理,新增一个图片处理方法:
0
 
  1. static async Task ProcessImages(HtmlDocument doc, string baseUrl, string imagesDir)
  2. {
  3. var imageNodes = doc.DocumentNode.SelectNodes("//img[@src]");
  4. if (imageNodes != null)
  5. {
  6. foreach (HtmlNode imageNode in imageNodes)
  7. {
  8. string imageUrl = imageNode.GetAttributeValue("src", null);
  9. imageUrl = EnsureAbsoluteUrl(baseUrl, imageUrl);
  10. string fileName = Path.GetFileName(new Uri(imageUrl).LocalPath);
  11. string localPath = Path.Combine(imagesDir, fileName);
  12. byte[] imageBytes = await client.GetByteArrayAsync(imageUrl);
  13. await File.WriteAllBytesAsync(localPath, imageBytes);
  14. }
  15. }
  16. }

 

网页爬取方法里面把文本有关改成图片
0
以下是一个辅助方法,辅助方法用于处理相对URL,确保所有请求的URL是绝对的,防止资源加载失败。
static string EnsureAbsoluteUrl(string baseUrl, string url) { return Uri.IsWellFormedUriString(url, UriKind.Absolute) ? url : new Uri(new Uri(baseUrl), url).AbsoluteUri; }
执行程序,执行完毕,根目录下新增Images文件夹
0
文件夹内会看到该网址的所有图片文件。
0
图片文件格式都会被抓取,可以根据自己需要进行过滤。如果是整个站点,可以根据循环进行获取每个页面的数据。
最后再提供一个视频爬取的代码,由于没找到可以爬取的站点,此处演示就不演示了,仅供代码出来给大家学习和技术分享使用。感兴趣的大佬可以自行尝试。
0
 
  1. static async Task ProcessVideos(HtmlDocument doc, string baseUrl, string videosDir)
  2. {
  3. var videoNodes = doc.DocumentNode.SelectNodes("//video/source[@src]");
  4. if (videoNodes != null)
  5. {
  6. foreach (HtmlNode videoNode in videoNodes)
  7. {
  8. string videoUrl = videoNode.GetAttributeValue("src", null);
  9. videoUrl = EnsureAbsoluteUrl(baseUrl, videoUrl);
  10. string videoName = Path.GetFileName(new Uri(videoUrl).LocalPath);
  11. string videoPath = Path.Combine(videosDir, videoName);
  12. byte[] videoBytes = await client.GetByteArrayAsync(videoUrl);
  13. await File.WriteAllBytesAsync(videoPath, videoBytes);
  14. }
  15. }
  16. }

如果大佬们想要直接获取我本地测试的源码demo,可以在我的公众号【Dotnet Dancer】后台回复:【爬虫】  即可获取我的本地demo源码自行调试和把玩。

最近园子时不时会图片全挂掉,如果图片没掉了,可以移步另一个地方围观:

https://mp.weixin.qq.com/s/NB2UWsfUdgNU82UVRbWe3Q

 

如果以上内容对你有帮助,欢迎关注我的公众号【Dotnet Dancer】,或点赞、推荐和分享。我会时不时更新一些其他C#或者其他技术文章。

 
 

原文链接:https://www.cnblogs.com/weskynet/p/18216738

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号