算不上虫

2018-08-21  本文已影响0人  ouyounger

爬虫这个东西,以前只是听说过,并不曾认真了解过,本来只是想能做单机的程序就好了,所以对网络这方面一直躲躲闪闪,尤其是多线程异步这一块始终在隐隐作痛,思维还停留在面向过程编程,哎~
好吧,昨天写的这个根本就算不上个虫吧,最多就是行模拟网络请求的C井代码?
当然,代码是copy来的,但是出处忘记了。。。

  static void main(string[] args){
    string url = "http://blog.sina.com.cn/s/articlelist_1240149507_0_2.html";
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); // 这里Create() 返回的是WebRequest

    using(HttpResponse response = (HttpWebResponse)request.GetResponse()){
      if(response.StatusCode == HttpStateCode.OK){  // 状态码 200
        using(Stream stream = response.GetResponseStream()){
          using(StreamReader reader = new StreamReader(stream)){

            string html = reader.ReadToEnd();
            string regstr = @"(?is)<a(?:(?!href=).)*href=(['""]?)(?<url>[^""\s>]*)\1[^>]*>恩恩怨怨(?<text>(?:(?!</?a\b).)*)</a>";   //提取链接的内容

            Regex reg = new Regex(regstr, RegexOptions.IgnoreCase | RegexOptions.Singleline);
            MatchCollection mc = reg.Matches(html);

            foreach (Match m in mc){
              Console.WriteLine(m.Groups["url"].ToString() + ":" + m.Groups["text"].ToString());
              Console.WriteLine("------------------------------");
            }

          }
        }
      }
      else{
        Console.WriteLine("服务器返回错误:{0}", response.StatusCode);
      }
    } 
  }

其实也就是回去html 字符串,然后根据自己需要的规则进行匹配,就是这个样子吧,当然后面可以进行更深层次的搜索,不过有几点还是蛮有意思的:

1 C# HttpWebRequest 类,随然在C# 中类的属性定义形式可以不同于Java,但是F12 或者ReSharper 下Ctrl + B 看类属性的定义,还是和Java 一致的。
2 Stream,Reader 这些个概念还是不能丢,越来越发现基础的东西很重要
3 正则表达式,超级有用,超级有用
4 纯粹是一个功能验证~


好困~

上一篇 下一篇

猜你喜欢

热点阅读