问题是对某一网站或所有网站进行抓取,即下载所有网页。怎么实现呢?
先将问题最小化(转化的思想,转化为小规模,可以解决的问题):如果只有一个网页,怎么下载?问题变地很简单,只要用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推出)。
分享到:
相关推荐
C#开发的蜘蛛爬虫程序 C#开发的蜘蛛爬虫程序 C#开发的蜘蛛爬虫程序
详细讲述如何用C#实现蜘蛛/爬虫程序的多线程控制
蜘蛛爬虫程序的多线程控制(C#语言).txt
一个C#开发的蜘蛛程序,有兴趣的可以研究一下,我在外国网站上找了好久才找到了这资源。。
参考一个老外的程序写的...总体上说参考意义很大,对使用C#的朋友还是比较有用的,大家可以同时参考老外写的和我改造的程序进行对比研究,写这个程序我还是学到很多知识,希望对大家有用
C#版爬虫蜘蛛 C#版爬虫蜘蛛 C#版爬虫蜘蛛
用C#语言编写的网络爬虫源程序.网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
C#(Csharp)多线程HTTP并发请求(HttpWebRequest)采集蜘蛛
辛苦收集的资料,赶紧下吧。 使用C#设计数据采集、制作爬虫蜘蛛程序的资料。
特别适合于构造蜘蛛程序,这是因为它已经内置了... (3)多线程:只有拥有多线程能力,蜘蛛程序才能真正做到高 效。 (4)确定何时完成:不要小看这个问题,确定任务是否已经完成并不简单,尤其是在多线程环境下。
一个完整的网络爬虫(机器人蜘蛛)完整源代码 使用C#实现。
简 易 的 爬 虫 程 序,采 用 多 线 程
一个C#写的图片抓取程序,稍加修改同样适用于网页内容获取!因为是初学者,写的不好多多见谅!
一个非常有性能的c#蜘蛛、网络爬虫源代码。喜欢可以下载学习
C#简易蜘蛛爬虫程序源码 功能介绍: 用WebRequest、HttpWebResponse来获取页面的HTML代码, 并通过正规表达式得到链接和文本内容 页面直接复制到项目中即可 注意: 开发环境为Visual Studio 2008
12个蜘蛛程序,对研究爬虫技术很有用处,10分都太少了,最起码50分,绝对值!!!
4.由于是初学者,我在每个版本中都是边写边测试,以查找爬虫的bug,所以代码中有很多被注释的段落可能是测试使用。 5.具体版本信息查看各自的readme 另外,爬虫不止提取了url,同时提取了相应的锚文本。这个提取...
网络蜘蛛(网络爬虫)核心C#源代码 ,以下的C#代码是比较实用的核心程序。
C# 网页爬虫,针对一个网站,爬取解析出的所有的超链接,以实现所有站点资源的下载。 本代码是在以为大神的基础上经过修改而成。
一个开源的C#蜘蛛爬虫程序,看了让你很受启发. 其中涉及了Html标签属性的解析,爬行域名的控制,多线程等关键内容