爬虫/蜘蛛程序的制作C#语言

转载 2007年09月11日 18:28:00

问题是对某一网站或所有网站进行抓取,即下载所有网页。怎么实现呢?

先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地很简单,只要用WebClient/WebRequest(甚至OpenFileDialog都可以)打开Url地址,将数据流存入本地存储器的文件(以相应的扩展名作为扩展名)即可。示例代码如下:

string BoardStream;//下载内容存入此变量

Uri url = new Uri( http://www.163.com );//将下载地址转换为Uri类型

HttpWebRequest requestPage = ( HttpWebRequest )WebRequest.Create( url );

WebResponse response = requestMainPage.GetResponse();

Stream stream = response.GetResponseStream();//获取页面流

if( response.ContentType.ToLower().StartsWith( "text/" ) )//如果获得成功(即为文本格式)

{

    StreamReader reader = new StreamReader( stream , System.Text.Encoding.UTF8 );//读取获得内容流

BoardStream = reader.ReadToEnd();//将内容流转换为文本并存入变量BoardStream,即为所需要的数据流

}

StreamWriter saveAPage = new StreamWriter( C:/a.html , false , System.Text.Encoding.GetEncoding( "gb2312" ) );//实例化写入类,保存路径假设为C:/a.html

saveAPage.Write(Rich.Text);//创建写入任务

saveAPage.Flush();//写入文件(即清理缓存流)

saveAPage.Close();//关闭写入类的对象

好了,这样便完成了一个网页的下载。最简化问题解决!

 

好了,下面的问题是,如何获得更多的网页?可以分两步:

1.    得到更多的地址

2.    下载地址指向的链接内容(和上面下载一页的方法一样)

循环进行上面两步即可以完成蜘蛛的全部功能了 ^_^

要得到更多的地址,最好的办法是模拟人使用网页的办法。我们平时怎么浏览整个网站?无非是从主页依次点开各层链接而已。好了,思路出来了:

分析已经下载的主页文本,提取其中所有的Url地址信息,再依次下载得到的Url地址指向的链接即可。

现在网络上有不少Web2.0的网站了,这对解析Url地址有不小的负面作用。在Web2.0出现前,所有的链接都是在HREF后面出现的,而现在却没有了这样的关键字,地址可能出现于任何的关键字之后。怎么办呢?

经过大量分析,笔者发现:其实现在所有的链接还有一个共性,即都包裹在双引号(””)当中,这便对解析提供了极大的方便。笔者将链接分为两类:

1.    完整链接,即:http://www.163.com类,其前面有明显的标志http://,这样的内容很好提取,只要用String的静态方法IndexOf()找出http://的位置以及从此位置算起第一个“”出现的位置(即链接结束的位置),再用SubString()方法将地址提取出来即可。

2.    非完整链接,其形式一般为/index.htm,提取方法和完整链接的方法相同,只是判断它是不是链接上有一定难度(因为属性等其它信息也可能以“/”开头,这时就很难判断了。笔者采取的方法是试下载,即下载一下试试,如果超时刚不是,不超时刚是。注意:要在它的前面加上根地址,如“http://www.163.com/index.htm”。

 

好了,我想蜘蛛的所有功能已经实现了吧?嘿嘿^_^

只是这样一个蜘蛛程序怕是效率万般低下,因为它只有一个线程,光解析下一层的链接都要花上不少时间,怎么办呢?当然是采取更优化的办法:多线程

 

具体实现见《蜘蛛/爬虫程序的多线程控制》一文(稍后在本Blog推出)。

 

网络爬虫、spider程序、网络蜘蛛

问题?网络爬虫、spider程序、网络蜘蛛 定义:Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。它一般驻留在服务器上,通过给定的一些URL,利用HTT...
  • Mr_li13
  • Mr_li13
  • 2016年01月04日 20:57
  • 1406

关于爬虫及蜘蛛的几点见解

2011-12-01 10:46 951人阅读  搜索引擎脚本浏览器任务工具 做数据驱动型的网站,数据、信息就是你的命根子,一旦你的数据被盗取或被非法使用,对你的损失是不可估量的。人家可以...
  • sozhanma
  • sozhanma
  • 2014年03月14日 14:43
  • 899

C#语言实现网站爬虫蜘蛛程序

C#语言实现网站爬虫蜘蛛程序  问题是对某一网站或所有网站进行抓取,即下载所有网页。怎么实现呢?  先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地...
  • chunli200902520208
  • chunli200902520208
  • 2014年10月05日 01:10
  • 212

搜索引擎蜘蛛爬虫 User Agent 一览(便于采集)

今天分析研究了两个网站的 Apache 日志,分析日志虽然很无聊,但却是很有意义的事情,比如跟踪 SPAM 的 User Agent。顺便整理出一些搜索引擎爬虫的 User Agent,在这里分享一下...
  • zyh_1988
  • zyh_1988
  • 2016年05月10日 08:37
  • 2831

C#构造蜘蛛爬虫程序

是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载Web页面以便脱机使用,开发者利用蜘蛛程序扫描自...
  • oMingZi12345678
  • oMingZi12345678
  • 2013年09月10日 15:40
  • 1205

C#编写的蜘蛛爬虫程序

C#特别适合于构造蜘蛛程序,这是因为它已经内置了HTTP访问和多线程的能力,而这两种能力对于蜘蛛程序来说都是非常关键的。下面是构造一个蜘蛛程序要解决的关键问题:  ⑴HTML分析:需要某种HTML解析...
  • bysjlwdx
  • bysjlwdx
  • 2013年03月25日 22:40
  • 574

Java+MySQL实现网络爬虫程序

网络爬虫,也叫网络蜘蛛,有的项目也把它称作“walker”。维基百科所给的定义是“一种系统地扫描互联网,以获取索引为目的的网络程序”。网络上有很多关于网络爬虫的开源项目,其中比较有名的是Heritri...
  • laukicn
  • laukicn
  • 2017年06月02日 09:40
  • 469

判断IP是否为搜索引擎蜘蛛或爬虫

判断IP是否为搜索引擎蜘蛛或爬虫 主要是通过向DNS服务器发送反向域名解析查询,获取指定ip的相关域名信息来判断是否为相应搜索引擎或爬虫.  通过 dig 或者 host 工具皆可查询. Ex...
  • force_eagle
  • force_eagle
  • 2016年03月31日 12:36
  • 3219

网络爬虫c实现

#include #include #include #include #include #include #include #include #include #include ...
  • xu3737284
  • xu3737284
  • 2013年07月29日 12:33
  • 14465

网络爬虫(网络蜘蛛)之网页抓取

现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎、资讯采集、舆情监测等等,诸如此类。网络爬虫涉及到的技术(算法/策略)广而复杂,如网页获取、网页跟踪、网页分...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:爬虫/蜘蛛程序的制作C#语言
举报原因:
原因补充:

(最多只允许输入30个字)