基于C#实现网络爬虫 C#抓取网页Html源码
最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路。
首先是抓取Html源码,并选择<ulclass="post_list"> </ul>节点的href:要添加usingSystem.IO;usingSystem.Net;
privatevoidSearch(stringurl) { stringrl; WebRequestRequest=WebRequest.Create(url.Trim()); WebResponseResponse=Request.GetResponse(); StreamresStream=Response.GetResponseStream(); StreamReadersr=newStreamReader(resStream,Encoding.Default); StringBuildersb=newStringBuilder(); while((rl=sr.ReadLine())!=null) { sb.Append(rl); } stringstr=sb.ToString().ToLower(); stringstr_get=mid(str,"<ulclass=\"post_list\">","</ul>"); intstart=0; while(true) { if(str_get==null) break; stringstrResult=mid(str_get,"href=\"","\"",outstart); if(strResult==null) break; else { lab[url]+=strResult; str_get=str_get.Substring(start); } } } privatestringmid(stringistr,stringstartString,stringendString) { intiBodyStart=istr.IndexOf(startString,0);//开始位置 if(iBodyStart==-1) returnnull; iBodyStart+=startString.Length;//第一次字符位置起的长度 intiBodyEnd=istr.IndexOf(endString,iBodyStart);//第二次字符在第一次字符位置起的首次位置 if(iBodyEnd==-1) returnnull; iBodyEnd+=endString.Length;//第二次字符位置起的长度 stringstrResult=istr.Substring(iBodyStart,iBodyEnd-iBodyStart-1); returnstrResult; } privatestringmid(stringistr,stringstartString,stringendString,outintiBodyEnd) { //初始化out参数,否则不能return iBodyEnd=0; intiBodyStart=istr.IndexOf(startString,0);//开始位置 if(iBodyStart==-1) returnnull; iBodyStart+=startString.Length;//第一次字符位置起的长度 iBodyEnd=istr.IndexOf(endString,iBodyStart);//第二次字符在第一次字符位置起的首次位置 if(iBodyEnd==-1) returnnull; iBodyEnd+=endString.Length;//第二次字符位置起的长度 stringstrResult=istr.Substring(iBodyStart,iBodyEnd-iBodyStart-1); returnstrResult; }
好了,上面就是全部代码了,如果你想要运行出来的话,有些细节要自己修改下。
以上就是本文的全部内容,希望对大家的学习有所帮助。