• 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);//添加到搜索结果
        }
    }

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

  • 相关阅读:
    [LintCode] Cosine Similarity 余弦公式
    Word 2010 给公式添加序号
    Xshell连接不上虚拟机的问题和解决办法
    关于 “VMware Workstation 不可恢复错误- (vcpu-0)”
    TortoiseGit客户端安装及使用(上传代码到git@osc
    Android Studio修改项目名和包名
    Android 环信(Android)设置头像和昵称的方法
    Android SharedPreferences存储map的方法
    Android 环信聊天头像昵称显示解决方案
    Android 判断当前Fragment是否可见(Visible)
  • 原文地址:https://www.cnblogs.com/woud/p/2999389.html
Copyright © 2020-2023  润新知