基于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;
}
好了,上面就是全部代码了,如果你想要运行出来的话,有些细节要自己修改下。
以上就是本文的全部内容,希望对大家的学习有所帮助。