.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中新建控制台自行去运行。或者点击“阅读原文”去浏览代码更友好。

相关文章
|
3月前
|
数据采集 消息中间件 安全
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
|
数据采集 uml 自然语言处理
.NetCore实践爬虫系统(二)自定义规则
回顾 上篇文章NetCore实践爬虫系统(一)解析网页内容 我们讲了利用HtmlAgilityPack,输入XPath路径,识别网页节点,获取我们需要的内容。评论中也得到了大家的一些支持与建议。下面继续我们的爬虫系统实践之路。
1056 0
|
数据采集 测试技术 机器人
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
1162 0
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
20天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
47 4
|
1月前
|
数据采集 存储 API
在信息时代,Python爬虫用于自动化网络数据采集,提高效率。
【7月更文挑战第5天】在信息时代,Python爬虫用于自动化网络数据采集,提高效率。基本概念包括发送HTTP请求、解析HTML、存储数据及异常处理。常用库有requests(发送请求)和BeautifulSoup(解析HTML)。基本流程:导入库,发送GET请求,解析网页提取数据,存储结果,并处理异常。应用案例涉及抓取新闻、商品信息等。
65 2
|
1月前
|
数据采集 存储 Java
如何让Python爬虫在遇到异常时继续运行
构建健壮Python爬虫涉及异常处理、代理IP和多线程。通过try/except捕获异常,保证程序在遇到问题时能继续运行。使用代理IP(如亿牛云)防止被目标网站封锁,多线程提升抓取效率。示例代码展示了如何配置代理,设置User-Agent,以及使用SQLite存储数据。通过`fetch_url`函数和`ThreadPoolExecutor`实现抓取与重试机制。
如何让Python爬虫在遇到异常时继续运行