使用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
目录
相关文章
|
26天前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
2月前
|
C#
一文搞懂C#中类成员的可访问性
一文搞懂C#中类成员的可访问性
39 5
|
2月前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
2月前
|
数据采集 XML C#
C#简化工作之实现网页爬虫获取数据
C#简化工作之实现网页爬虫获取数据
41 1
|
2月前
|
存储 安全 测试技术
网络中的状态检查是什么?
【8月更文挑战第24天】
66 0
|
2月前
|
Kubernetes 网络协议 Linux
如何检查 Kubernetes 网络配置
如何检查 Kubernetes 网络配置
51 0
|
4月前
|
数据采集 XML 存储
技术经验分享:C#构造蜘蛛爬虫程序
技术经验分享:C#构造蜘蛛爬虫程序
29 0
|
4月前
|
文字识别 开发工具 Android开发
视觉智能开放平台操作报错合集之使用人脸属性检测接口,出现报错:图片无法下载,请检查链接是否可访问和本地网络情况,该如何解决
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
5月前
|
分布式计算 资源调度 监控
Hadoop节点网络硬件检查
【5月更文挑战第2天】
48 9
|
5月前
|
分布式计算 资源调度 安全
Hadoop节点检查网络交换机、路由器和网线
【5月更文挑战第1天】您可以对Hadoop节点中的网络交换机、路由器和网线进行全面的检查,确保这些设备正常运行并且网络连接稳定可靠。如果在检查过程中发现任何问题,应及时解决,以避免影响Hadoop集群的稳定性和性能。
71 6