使用c#制作网络爬虫,检查站点可访问性-阿里云开发者社区

开发者社区> bill.kang> 正文

使用c#制作网络爬虫,检查站点可访问性

简介:   前几天自己负责的网站出现了不能访问的问题,系统监控程序通过告警将这一信息告诉了管理员。管理员找到了我,告诉我站点不能正常访问。后来问题查明,是负载均衡器出了问题。自己在检查站点的时候,发现有些图片不能正确显示,原因是图片链接无效。
+关注继续查看

  前几天自己负责的网站出现了不能访问的问题,系统监控程序通过告警将这一信息告诉了管理员。管理员找到了我,告诉我站点不能正常访问。后来问题查明,是负载均衡器出了问题。自己在检查站点的时候,发现有些图片不能正确显示,原因是图片链接无效。

  后来我就在总结这次故障,监控程序只能检测几个配置的链接,不可能对整个站点所有链接进行检测,不然配置文件要写一大堆。如果是配置外的链接不能访问,那不是就没有办法告知管理员了吗,况且现在的监控程序也不能检查页面图片能否正常显示。如果每次都要人工去检查,那是相当不现实的,那我能不能写个小程序去实现自动检查,并把检查结果已邮件的形式发送给相关人员呢?于是我想到了,可以使用网络爬虫干这件事情,当然这个爬虫是定制版的,只爬当前站点。

  首先创建一个控制台程序(其他类型的工程也可以),命名为WebResourceInspector。

  新建三个文件:Inspector.cs,EmailHelper.cs,config.xml。结果如下:

  其中Inspector.cs是监控类,里面利用HttpWebRequest实现数据爬取,分析。EmailHelper.cs是邮件帮助类,发送邮件。config.xml是爬取网站的配置文件。还有很多配置信息是写在app.config里面的。

  工程里面用到两个dll,一个是log4net,这个是记录日志的,不多说了,大家可以去网上找到很多相关文章。另一个是HtmlAgilityPack,他用来解析你爬取的html数据,相当的强大,你可以把整个html作为dom来操作,使用xpath获取link和img的信息。

  程序实现原理:

  通过HttpWebRequest,HttpWebResponse获取首页的html信息,通过HtmlAgilityPack结合xpath获取到所有的a标签和图片。把所有的链接和图片地址放到待检查队列unVisitedPageUrlList中。放入之前要检查当前链接是否已经检查过。只有已当前站点域名开头的链接才做页面html的进一步爬取,获取下面页面的链接信息并放入待检查队列。以此类推,直到站点内所有链接都检查完毕。非本站域名开头链接只做可访问性判断。程序里我使用了多线程,以提高运行效率。线程数在配置文件里配置。把所有的错误记录日志,最后发送邮件,通知管理员。

  

  代码我贴出来了,有兴趣的人可以下载后查看源代码。下载地址:WebResourceInspector.zip

adpics.aspx?source=kbh1983&sourcesuninfo

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
分享录制的正则表达式入门、高阶以及使用 .NET 实现网络爬虫视频教程
我发布的「正则表达式入门以及高阶教程」,欢迎学习。 课程简介 正则表达式是软件开发必须掌握的一门语言,掌握后才能很好地理解到它的威力; 课程采用概念和实验操作 4/6 分隔,帮助大家理解概念后再使用大量的实例加深对概念的理解; 实例操作是对概念最好的理解,也是学习新语言最有效的办法; 在课程中也穿插着大量软件开发的技巧和大家分享; 应该是把晦涩的正则表达式讲解的最生动的课程; 掌握了正则表达式后,您一定会觉得这是一门最值得掌握的语言。
921 0
改善C#程序的157建议——建议42学习笔记:使用泛型参数兼容泛型接口的不可变性。
改善C#程序的157建议——建议42学习笔记:使用泛型参数兼容泛型接口的不可变性。
21 0
springMVC使用拦截器检查用户登录
参考文章 编写拦截器类 package cultivate_web.interceptor; import javax.servlet.http.HttpServletRequest; import javax.
1000 0
网站上线之前需要检查的13个问题
废话少说: 1、用了Google分析等统计工具了吗? 你应该跟踪每个页面的访问情况,哪些受欢迎,哪些挣得钱多。 2、用了Pagespeed和Yslow了吗? 70%用户看得到的速度提升都是通过客户端优化完成的。
627 0
3、web爬虫,scrapy模块介绍与使用
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。
932 0
k8s使用calico网络
calico是一个安全的 L3 网络和网络策略提供者。 calico使用bgp的原因:why bgp not ospf 有关BGP rr的介绍 安装方式 标准托管安装(ETCD存储) 需要提前安装etcd集群# 创建calico连接etcd的secret kubectl create secret.
4993 0
+关注
bill.kang
从事软件研发十余年,入行前端开发六年有余,对前端工程化有一定认识。 现就职于客如云科技有限公司,任前端技术经理一职。
109
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载