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

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

先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地很简单,只要用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.    完整链接,

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值