Timewe TM
Wap浏览器
高级搜索

爬虫/蜘蛛程序的制作(C#语言) - 无线搜索技术 - 无线搜索论坛 自由!开放!专门研究与交流无线搜索(移动搜索/手机搜索/WAP搜索/短信搜索/语音搜索/手机客户端软件搜索/实名/寻址) - Powered by Discuz!

排名

无线搜索论坛
注册 登录 搜索 标签 帮助
无线搜索论坛 无线搜索技术 爬虫/蜘蛛程序的制作(C#语言)
上一主题 下一主题
发新话题
发新话题 发布投票 发布商品 发布悬赏 发布活动 发布辩论 发布视频
打印 爬虫/蜘蛛程序的制作(C#语言)
NapolLee


少校Rank: 10Rank: 10
个人空间 发短消息 加为好友 当前离线
1#大 中小 发表于 2008-1-19 20:58 只看该作者
爬虫/蜘蛛程序的制作(C#语言)
作者:Felomeng 来源:CSDN博客  酷勤网收集 2007-11-12
摘要酷勤网  先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地很简单,只要用WebClient/WebRequest(甚至OpenFileDialog都可以)打开Url地址,将数据流存入本地存储器的文件(以相应的扩展名作为扩展名)即可。
问题是对某一网站或所有网站进行抓取,即下载所有网页。怎么实现呢?
先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地很简单,只要用WebClient/WebRequest(甚至OpenFileDialog都可以)打开Url地址,将数据流存入本地存储器的文件(以相应的扩展名作为扩展名)即可。示例代码如下:
string BoardStream;//下载内容存入此变量
Uri url = new Uri( “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. 完整链接,即:”www.163.com ”类,其前面有明显的标志http://,这样的内容很好提取,只要用String的静态方法IndexOf()找出http://的位置以及从此位置算起第一个“””出现的位置(即链接结束的位置),再用SubString()方法将地址提取出来即可。
2. 非完整链接,其形式一般为”index.htm”,提取方法和完整链接的方法相同,只是判断它是不是链接上有一定难度(因为属性等其它信息也可能以“””开头,这时就很难判断了。笔者采取的方法是试下载,即下载一下试试,如果超时刚不是,不超时刚是。注意:要在它的前面加上根地址,如“www.163.com/index.htm ”。
好了,我想蜘蛛的所有功能已经实现了吧?嘿嘿^_^
只是这样一个蜘蛛程序怕是效率万般低下,因为它只有一个线程,光解析下一层的链接都要花上不少时间,怎么办呢?当然是采取更优化的办法:多线程
具体实现见《蜘蛛/爬虫程序的多线程控制》一文。
来自:blog.csdn.net/felomeng/archive/2007/03/06/1522292.aspx
QQ
UID793 帖子638 精华9 积分3906 财富12478 贡献1264 威望13 阅读权限10 性别男 来自广东 在线时间126 小时 注册时间2007-10-6 最后登录2008-10-4
查看详细资料
TOP efgh917


下士Rank: 4Rank: 4
个人空间 发短消息 加为好友 当前离线
2#大 中小 发表于 2008-12-26 05:25 只看该作者
圣诞节没人呀,过的真没意思
圣诞节没人呀,过的真没意思上海华容路鲜花 上海汇龙鲜花 上海盛大鲜花 上海强生花园鲜花 上海樟树花苑鲜花
QQ
UID2120 帖子50 精华 积分151 财富510 贡献50 威望0 阅读权限4 性别女 在线时间0 小时 注册时间2008-12-9 最后登录2008-12-26
查看个人网站
查看详细资料
TOP 上一主题 下一主题
发新话题
控制面板首页 编辑个人资料 积分记录 公众用户组 升级个人空间
当前时区 GMT+8, 现在时间是 2009-1-9 19:22 粤ICP备07021541号
清除 Cookies - 联系我们 - 无线搜索论坛 - Archiver - WAP - TOP
Discuz!
Powered by Discuz! 6.0.0 (C) 2001-2007 Comsenz Inc.
内页
内页 内页

直接浏览

提示:以上根据您的指令使用Timewe浏览服务访问的www.wxss.org网站,其内容、服务或立场跟Timewe无关 ...
欢迎举报存在违法、不良信息的网站,净化网络环境

Wap推荐: 极品游戏大作


高级搜索

返回主页 加入Timewe 我的地盘 反馈意见 关于我们 最新动态 联系我们 加入收藏

各主流搜索引擎收录Timewe

免费wap搜索引擎 wap分类网址 wap百强 wap排名 无线周刊 企业搜索 wap浏览器 wap公社
不需下载、不用安装、没有插件,Timewe在线浏览服务助您轻松浏览Wap/WEB/RSS/ATOM/RDF/OPML!

http://timewe.net手机电脑同步服务
(C)2003-2009 Timewe