日期:2014-05-17 浏览次数:21130 次
我们知道,要想对数据进行检索,最基本也是最重要的东西就是数据本身了。
本章介绍如何获取大量的网页信息。
相信大家都听说过‘网络爬虫’,我们正是通过这种方式搜集网页的。
一、下面首先简单的介绍一下网络爬虫的基本结构:
简单的讲就是:
1、从一个url开始搜索,将这个页面上的所有链接保存,放入一个queue中。
2、接着从这个queue中取出一个url,重复第1步
这个过程类似于BFS(广度优先搜索)。(为了防止url被重复使用,这里可以用两个集合分别存放已下载与未下载的url)。
由于下载网页的速度与网速有关,cpu的时间大部分时间都消耗到了等待上面,因此,这里的网络爬虫采用的是多线程的方式。
二、分析网络爬虫的源码:
首先对程序各个类进行简要的讲解:
Cyh_HttpServer类:
该类中只有一个方法public string GetResponse(string url)功能是对指定的url获取该页面的html,实现该功能必须解决以下几个问题:
1.如何获取指定url的html?
其实实现该功能很简单,在C#中通过HttpWebResponse类的调用就能实现,具体方法是:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream reader = response.GetResponseStream();
然后从reader流中读取内容就行了
2.编码问题,网页通常使用utf-8或gb2312进行编码,如果程序在读取流时使用了错误的编码会导致中文字符的错误
3.对于有些页面的html可能会非常大所以我们要限制大小,在程序中最在读取不会超过100k。
代码如下:
/// <summary> /// <para>HTTP服务类</para> /// 由于在程序外该类是不可见的,所以声明时用了internal. /// </summary> internal class Cyh_HttpServer {