C#网页爬虫学习笔记(1)

最近做的东西感觉是各种搜索,这次学习的爬虫技术。爬虫技术,又叫做网络蜘蛛(蚂蚁等),是借助计算机实现人类无法达到的速度不间断的对执行某些任务,在这里我们的目标是获取指定网站中的指定数据。

既然要获取数据,我们首先要做的就是与网站取得通信建立连接,C#的System.Web为我们提供了建立通信的方法

 HttpWebRequest all_request = (HttpWebRequest)WebRequest.Create(galURL);
 WebResponse all_response = all_request.GetResponse();

HttpWebRequest是像指定网站发送请求,在这里我们向galURL这个string包含的地址发送了请求,然后通过WebResponse接收服务器发送过来的请求

string all_code = "";
//提取网页内容
StreamReader the_Reader = new StreamReader(all_response.GetResponseStream(), Encoding.Default);
all_code = the_Reader.ReadToEnd();
the_Reader.Close();

接收到响应后,我们就可以通过StreamReader来获得response的数据流,然后通过ReadToEnd方法便可以轻松提取该网页中的所有内容,在这里要注意一下StreamReader是可以指定编码类型的,在这里我们使用Encoding.Default来获取默认的编码类型,不设定则使用UTF-8(我在这里被坑了好久= = 以为是正则匹配的错误呢···)

这样一来all_code下就保存了网页的所有代码了,剩下的事情就是进行正则匹配了:

 //正则匹配分析
 List<string> search_list = new List<string>();
 Regex regex = new Regex(@"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]?)", RegexOptions.IgnoreCase);
 MatchCollection mc = regex.Matches(all_code);

在这里我们申请了一个List来保存正则结果,紧接着用正则表达式@"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]?)"匹配all_code中的所有内容,这个正则表达式看不懂也没关系,它的意思是匹配所有标准网页链接,RegexOptions.IgnoreCase的意思是无视大小写,匹配结果会保存到mc中去。最后的工作就是提取mc中的内容了,代码如下:

for (int i = 0; i < mc.Count; i++)
{
    string search_Str = mc[i].ToString();
    if (search_list.Contains(search_Str) == false)//过滤
    {
        search_list.Add(search_Str);//添加到搜索结果
    }
}

很简单,直接通过下标循环访问就可以了,最后再做一下过滤工作,一个最简单的网页爬虫就做好了

posted on 2013-04-04 15:20  woud  阅读(654)  评论(0编辑  收藏  举报

导航