基于C#实现网络爬虫 C#抓取网页Html源码
程序员文章站
2024-01-24 13:38:22
最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的...
最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找。所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路。
首先是抓取html源码,并选择<ul class="post_list"> </ul>节点的href:要添加using system.io;using system.net;
private void search(string url) { string rl; webrequest request = webrequest.create(url.trim()); webresponse response = request.getresponse(); stream resstream = response.getresponsestream(); streamreader sr = new streamreader(resstream, encoding.default); stringbuilder sb = new stringbuilder(); while ((rl = sr.readline()) != null) { sb.append(rl); } string str = sb.tostring().tolower(); string str_get = mid(str, "<ul class=\"post_list\">", "</ul>"); int start = 0; while (true) { if (str_get == null) break; string strresult = mid(str_get, "href=\"", "\"", out start); if (strresult == null) break; else { lab[url] += strresult; str_get = str_get.substring(start); } } } private string mid(string istr, string startstring, string endstring) { int ibodystart = istr.indexof(startstring, 0); //开始位置 if (ibodystart == -1) return null; ibodystart += startstring.length; //第一次字符位置起的长度 int ibodyend = istr.indexof(endstring, ibodystart); //第二次字符在第一次字符位置起的首次位置 if (ibodyend == -1) return null; ibodyend += endstring.length; //第二次字符位置起的长度 string strresult = istr.substring(ibodystart, ibodyend - ibodystart - 1); return strresult; } private string mid(string istr, string startstring, string endstring, out int ibodyend) { //初始化out参数,否则不能return ibodyend = 0; int ibodystart = istr.indexof(startstring, 0); //开始位置 if (ibodystart == -1) return null; ibodystart += startstring.length; //第一次字符位置起的长度 ibodyend = istr.indexof(endstring, ibodystart); //第二次字符在第一次字符位置起的首次位置 if (ibodyend == -1) return null; ibodyend += endstring.length; //第二次字符位置起的长度 string strresult = istr.substring(ibodystart, ibodyend - ibodystart - 1); return strresult; }
好了,上面就是全部代码了,如果你想要运行出来的话,有些细节要自己修改下。
以上就是本文的全部内容,希望对大家的学习有所帮助。