.net爬虫是一门必修课

简介: 本篇适合初学者学习爬虫,大概了解下什么是爬虫,介绍.net方面的网络操作类,及html结构的解析工具,从另一方面展现出不是一提爬虫,就是python怎样怎样,很多高级语言都可以爬虫,其实爬虫很简单,只是“爬虫”这个名字很霸气。

背景

网上关于爬虫的介绍很多,小编当初刚入门编程领域时老是听别人说爬虫怎么怎么好玩,对爬虫也没有概念,只知道这个名字特别牛叉,后来在采集数据时才真心明白"爬虫"其含义,不得不说取这个名字的人相当有水准,定登大雅之堂。关于这些概念小编就顺带一过,需要更详细的说明,请谷歌或百度知。小编今天要介绍的是.net爬虫,近几年,网上都在火吹python这门语言怎么怎么牛逼,凡是说爬虫的,谈人工智能的必能扯上python,当然小编这这里没有任何贬低python的意思。只是python爬的.net照样能干,java也可以,大部分高级语言都可以做到!好了,牛逼不多吹,下面亮真货。

在抓取数据之前,我们心里大概有个思路;

第一点:数据从网上来,必然要用到网络操作类,在.net这方面有三个操作类供我们使用(WebClient,HttpClient,HttpWebRequest),WebClient操作简单粗暴、HttpClient使用时注意资源的释放问题、HttpWebRequest更接近底层,在使用时稍微麻烦点,其实三者一般想要的功能都可以实现。

第二点:抓取的数据里面都是和html元素混合在一起,那必然需要解析html结构,筛选出我们想要的数据。这方面介绍两款工具(HtmlAgilityPack结合XPath使用,AngleSharp)。

我们抓取下博客园的详情页数据,上代码;
        {
            HtmlWeb client = new HtmlWeb();
            string detailUrl = "https://www.cnblogs.com/wangjiming/p/10098061.html";
            var doc = client.Load(detailUrl);
            HtmlNode node = doc?.DocumentNode.SelectSingleNode("//div[@class='post']");
            var title = node?.SelectSingleNode("h1[@class='postTitle']");
            HtmlNode node2 = doc?.DocumentNode.SelectSingleNode("//div[@class='postBody']");
            var content = node2?.SelectSingleNode("div[@id='cnblogs_post_body']");
            Console.WriteLine(title?.InnerText);
            Console.WriteLine(content?.InnerText);
            Console.WriteLine("---------------");
            //提取所有图片共下载
            string pat = @"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>";
            Regex r = new Regex(pat, RegexOptions.Compiled);
            MatchCollection listImg = r.Matches(content.InnerHtml);
            foreach (Match item in listImg)
            {
                if (item.Success)
                {
                    string url = item.Groups[1].Value.ToString();
                    HttpDownLoad.DownloadUseWebClient(url, "image");
                    string fullImgSrc = "/editorImages/cpy" + url.Substring(url.LastIndexOf('/'));
                    content.InnerHtml = content.InnerHtml.Replace(url, fullImgSrc);
                    Console.WriteLine(content.InnerHtml);
                }
            }
            Console.ReadLine();
        } 
  贴上关于图片下载的方法(HttpDownLoad.DownloadUseWebClient(url, "image"));
 public static void DownloadUseWebClient( string url, string localPath,string webSite=null)
        {
            WebClient wc = new WebClient();
            string fileName = Path.GetFileName(url);
            string path = Path.Combine(localPath, fileName);
            if (!Directory.Exists(localPath))
            {
                Directory.CreateDirectory(localPath);
            }
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            wc.Headers.Add("Referer", webSite);     
            wc.DownloadFile(url, path);
        }  

大家可复制以上代码到vs中新建控制台自行去运行。或者点击“阅读原文”去浏览代码更友好。

相关文章
|
8月前
|
数据采集 消息中间件 安全
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
118 0
|
数据采集 uml 自然语言处理
.NetCore实践爬虫系统(二)自定义规则
回顾 上篇文章NetCore实践爬虫系统(一)解析网页内容 我们讲了利用HtmlAgilityPack,输入XPath路径,识别网页节点,获取我们需要的内容。评论中也得到了大家的一些支持与建议。下面继续我们的爬虫系统实践之路。
1079 0
|
数据采集 测试技术 机器人
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
1176 0
|
12天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
53 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
91 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
70 0