爬虫这个东西,以前只是听说过,并不曾认真了解过,本来只是想能做单机的程序就好了,所以对网络这方面一直躲躲闪闪,尤其是多线程异步这一块始终在隐隐作痛,思维还停留在面向过程编程,哎~
好吧,昨天写的这个根本就算不上个虫吧,最多就是行模拟网络请求的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 一致的。
2Stream
,Reader
这些个概念还是不能丢,越来越发现基础的东西很重要
3 正则表达式,超级有用,超级有用
4 纯粹是一个功能验证~
好困~
网友评论