C#实现web信息自动抓取.docx

上传人:b****4 文档编号:3692755 上传时间:2022-11-24 格式:DOCX 页数:20 大小:20.02KB
下载 相关 举报
C#实现web信息自动抓取.docx_第1页
第1页 / 共20页
C#实现web信息自动抓取.docx_第2页
第2页 / 共20页
C#实现web信息自动抓取.docx_第3页
第3页 / 共20页
C#实现web信息自动抓取.docx_第4页
第4页 / 共20页
C#实现web信息自动抓取.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C#实现web信息自动抓取.docx

《C#实现web信息自动抓取.docx》由会员分享,可在线阅读,更多相关《C#实现web信息自动抓取.docx(20页珍藏版)》请在冰豆网上搜索。

C#实现web信息自动抓取.docx

C#实现web信息自动抓取

C#实现web信息自动抓取

背景

 

随着Internet的普及,网络信息正以极高的速度增长,在这么多数据中找到自己需要的信息是一件很繁琐的事情,找到需要的信息后如何获取也是件麻烦的事。

这就需要Internet信息抓取程序来代替人工的操作。

所谓Internet信息抓取程序,就是程序会按照用户的关键词或关键网站来收集相应的信息,并提供给用户想要的信息格式。

 

信息量的增加会带来信息网站发布人员工作量的剧增,为实现信息发布系统实现信息自

动发布、减少工作人员工作量、即时跟踪最新信息,就需要自动信息提供程序,因此Internet信息抓取程序应运而生。

 

目标

 

实现自定义网站信息分类抓取,存入本地数据库、生成静态页面或其它用户定义的信息结构,并下载与信息相关的多媒体文件。

 

开发

 

l目标站点结构分析

本步骤是准确抓取信息个关键。

首先要选择更新频率高的页面做为抓取地址,然后分析要抓取内容页面url特点。

然后分析要抓取信息页面的元素特性,比如标题位置,内容位置等,得到定位标记点。

将以上信息写成自己的配置文件或存到数据库中。

每个网站都需要分析,写出单独的配置文件,供抓取程序使用。

 

l信息提取

根据配置文件取得要抓取页面url,使用HttpWebRequest类获取内容:

//获取http页面函数

 

C#code

publicstringGet_Http(stringa_strUrl,inttimeout)

{

stringstrResult;

try

{

HttpWebRequestmyReq=(HttpWebRequest)HttpWebRequest.Create(a_strUrl);

myReq.Timeout=timeout;

HttpWebResponseHttpWResp=(HttpWebResponse)myReq.GetResponse();

StreammyStream=HttpWResp.GetResponseStream();

StreamReadersr=newStreamReader(myStream,Encoding.Default);

StringBuilderstrBuilder=newStringBuilder();

while(-1!

=sr.Peek())

{

strBuilder.Append(sr.ReadLine()+"\r\n");

}

strResult=strBuilder.ToString();

}

catch(Exceptionexp)

{

strResult="错误:

"+exp.Message;

}

returnstrResult;

}

获取页面内容后,分析页面中连接地址取到要抓取的url:

C#code

//处理页面标题和链接

publicstringSniffWebUrl(stringurlStr,stringblockB,stringblockE)

{

stringurlch1="";

stringurlch2="";

intend_n1=0;

intend_nums=0;

intend_nums1=0;

intend_nums2=0;

intend_nums3=0;

stringreUTStr="";

stringreTitle="";

stringret="";

try

{

intpos01=urlStr.IndexOf(".");

intpos02=urlStr.LastIndexOf("/");

if(pos01<0)

{

return"";

}

if(pos02<0)

{

return"";

}

intpos03=urlStr.IndexOf("/",pos01);

if(pos03<0)

{

urlch1=urlStr;

urlch2=urlStr;

}

else

{

urlch1=urlStr.Substring(0,pos03);

urlch2=urlStr.Substring(0,pos02);

}

stringtmpAllStr=newPublicFun().Get_Http(urlStr,time1);

intpos1=tmpAllStr.IndexOf(blockB);

intpos2=tmpAllStr.IndexOf(blockE,pos1+blockB.Length);

if(pos1>0&&pos2>0&&pos2>pos1)

{

ret=tmpAllStr.Substring(pos1+blockB.Length,pos2-pos1-blockB.Length);

ret=ret.Substring(ret.IndexOf("<"));

while(ret.IndexOf("=0)

{

ret=ret.Substring(0,ret.IndexOf("

}

while(ret.IndexOf("=0)

{

ret=ret.Substring(0,ret.IndexOf("

}

while(ret.IndexOf("Href=")>=0)

{

ret=ret.Substring(0,ret.IndexOf("Href="))+"href="+ret.Substring(ret.IndexOf("Href=")+5);

}

while(ret.IndexOf("HREF=")>=0)

{

ret=ret.Substring(0,ret.IndexOf("HREF="))+"href="+ret.Substring(ret.IndexOf("HREF=")+5);

}

while(ret.IndexOf("href='")>=0)

{

ret=ret.Substring(0,ret.IndexOf("href='"))+"href=\""+ret.Substring(ret.IndexOf("href='")+6);

}

}

tmpAllStr=ret;

intbegin_nums=tmpAllStr.IndexOf("href=");

while(begin_nums>=0)

{

stringtmpStrA="";

stringtmpStrB=tmpAllStr.Substring(begin_nums+5,1);

if(tmpStrB=="\"")

{

end_n1=begin_nums+6;

if((end_n1+1)>tmpAllStr.Length)

{

return"";

}

tmpStrA=tmpAllStr.Substring(begin_nums+6,1);

}

else

{

end_n1=begin_nums+5;

tmpStrA=tmpStrB;

}

if(tmpStrA=="#")

{

tmpAllStr=tmpAllStr.Substring(end_n1);

begin_nums=tmpAllStr.IndexOf("href=");

}

else

{

end_nums1=tmpAllStr.IndexOf("",end_n1);

end_nums2=tmpAllStr.IndexOf(">",end_n1);

end_nums3=tmpAllStr.IndexOf("

if((end_nums3>=0)&&(end_nums2>=0))

{

reTitle=tmpAllStr.Substring(end_nums2+1,end_nums3-end_nums2-1);

if(end_nums1>end_nums2)

{

end_nums=end_nums2;

}

else

{

if(end_nums1<0)

{

end_nums=end_nums2;

}

else

{

end_nums=end_nums1;

}

}

stringstr4=tmpAllStr.Substring(end_nums-1,end_nums-end_nums+1);

if(str4=="\""||str4=="'")

{

end_nums=end_nums-1;

}

stringsTotalOne=tmpAllStr.Substring(end_n1,end_nums-end_n1);

if(sTotalOne.IndexOf("http:

//")<0)

{

if(sTotalOne.IndexOf("/")==0)

{

sTotalOne=urlch1+sTotalOne;

}

else

{

intlinshiIntNum=0;

intflags=0;

stringurlChange=urlStr;;

while(sTotalOne.IndexOf("../")>=0)

{

sTotalOne=sTotalOne.Substring(sTotalOne.IndexOf("../")+3);

linshiIntNum=linshiIntNum+1;

flags=flags+1;

}

while((urlChange.LastIndexOf("/")>=0)&&(linshiIntNum>=0))

{

urlChange=urlChange.Substring(0,urlChange.LastIndexOf("/"));

linshiIntNum=linshiIntNum-1;

}

if(flags==0)

{

sTotalOne=urlch2+"/"+sTotalOne;

}

else

{

sTotalOne=urlChange+"/"+sTotalOne;

}

}

}

reUTStr=reUTStr+newPublicFun().RemoveHtmlCode(reTitle)+sTotalOne;

tmpAllStr=tmpAllStr.Substring(end_nums3+4);

begin_nums=tmpAllStr.IndexOf("href=");

}

else

{

begin_nums=-1;

}

}

}

returnreUTStr;

}

catch(Exceptione)

{

return"";

}

}

得到要抓取内容的url后,处理该页面:

C#code

//获取链接内容并分类处理

publicstringGetWebContent(stringgatherUrl,stringsubUrl,stringsubTitle,stringb_Content,stringe_Content,stringb_Filter,stringe_Filter,stringroot)

{

stringtmpAllStr="";

stringdfStrB="";

stringdfStrE="";

stringrePicStr="";//图片返回路径

stringreContentStr="";

stringpicHtml="images";//本地图片路径

stringurlch1="";

stringurlch2="";

intpos1=gatherUrl.IndexOf(".");

intpos2=gatherUrl.LastIndexOf("/");

if(pos1<0)

{

return"";

}

if(pos2<0)

{

return"";

}

intpos3=gatherUrl.IndexOf("/",pos1);

if(pos3<0)

{

urlch1=gatherUrl;

urlch2=gatherUrl;

}

else

{

urlch1=gatherUrl.Substring(0,pos3);

urlch2=gatherUrl.Substring(0,pos2);

}

tmpAllStr=newPublicFun().Get_Http(subUrl,time1);

//取稿源

stringdocFromStr="";

if(dfStrB!

=""&&dfStrE!

="")

{

if(tmpAllStr!

="")

{

intb_docF=tmpAllStr.IndexOf(dfStrB);

if(b_docF>0)

{

inte_docF=tmpAllStr.IndexOf(dfStrE,b_docF+dfStrB.Length);

if(e_docF>0&&e_docF>b_docF&&e_docF-b_docF<20)

{

docFromStr=tmpAllStr.Substring(b_docF+dfStrB.Length,e_docF-b_docF-dfStrB.Length);

}

}

}

}

//取内容

if(tmpAllStr!

="")

{

intbegin_strnum=tmpAllStr.IndexOf(b_Content);

if(begin_strnum<0)

{

return"";

}

intend_strnum=tmpAllStr.IndexOf(e_Content,begin_strnum+b_Content.Length);

if(end_strnum<0)

{

return"";

}

stringsTotalSubM="";

if(end_strnum>begin_strnum)

{

sTotalSubM=tmpAllStr.Substring(begin_strnum,end_strnum-begin_strnum);

}

if(sTotalSubM=="")

{

return"";

}

//过滤无用信息

intbfnum=sTotalSubM.IndexOf(b_Filter);

if(bfnum>-1)

{

intefnum=sTotalSubM.IndexOf(e_Filter,bfnum);

if(efnum>-1)

{

if(efnum>bfnum)

{

sTotalSubM=sTotalSubM.Substring(0,bfnum)+sTotalSubM.Substring(efnum+e_Filter.Length);

}

}

}

接上

C#code

//格式化图片标记

while(sTotalSubM.IndexOf("Src=")>=0)

{

sTotalSubM=sTotalSubM.Substring(0,sTotalSubM.IndexOf("Src="))+"src="+sTotalSubM.Substring(sTotalSubM.IndexOf("Src=")+4);

}

while(sTotalSubM.IndexOf("SRC=")>=0)

{

sTotalSubM=sTotalSubM.Substring(0,sTotalSubM.IndexOf("SRC="))+"src="+sTotalSubM.Substring(sTotalSubM.IndexOf("SRC=")+4);

}

while(sTotalSubM.IndexOf("src='")>=0)

{

sTotalSubM=sTotalSubM.Substring(0,sTotalSubM.IndexOf("src='"))+"src=\""+sTotalSubM.Substring(sTotalSubM.IndexOf("src='")+5);

}

//取图片地址

intend_n12=0;

intend_nums2=0;

intbegin_nums2=sTotalSubM.IndexOf("src=");

while(begin_nums2>=0)

{

StringtmpStr=sTotalSubM.Substring(begin_nums2+4,1);

if(tmpStr=="\"")

{

end_n12=begin_nums2+5;

}

else

{

end_n12=begin_nums2+4;

}

intend_nums2a=sTotalSubM.IndexOf("",end_n12);

intend_nums2b=sTotalSubM.IndexOf(">",end_n12);

if(end_nums2b<0)

{

break;

}

if(end_nums2a>end_nums2b)

{

end_nums2=end_nums2b;

}

else

{

if(end_nums2a<0)

{

end_nums2=end_nums2b;

}

else

{

end_nums2=end_nums2a;

}

}

tmpStr=sTotalSubM.Substring(end_nums2-1,1);

if(tmpStr=="\""||tmpStr=="'")

{

end_nums2=end_nums2-1;

}

stringtmpPicStr=sTotalSubM.Substring(end_n12,end_nums2-end_n12);

if(tmpPicStr.IndexOf("http:

//")<0)

{

if(tmpPicStr.IndexOf("/")==0)

{

tmpPicStr=urlch1+tmpPicStr;

}

else

{

intlinshiIntNum=0;

intflags=0;

stringurlChange=subUrl;

while(tmpPicStr.IndexOf("../")>=0)

{

tmpPicStr=tmpPicStr.Substring(tmpPicStr.IndexOf("../")+3);

linshiIntNum=linshiIntNum+1;

flags=flags+1;

}

while((urlChange.LastIndexOf("/")>=0)&&(linshiIntNum>=0))

{

urlChange=urlChange.Substring(0,urlChange.LastIndexOf("/"));

linshiIntNum=linshiIntNum-1;

}

if(flags==0)

{

tmpPicStr=urlch2+"/"+tmpPicStr;

}

else

{

tmpPicStr=urlChange+"/"+tmpPicStr;

}

}

}

//tmpPicStr=tmpPicStr.ToLower();

stringtmpPicStrTmp=tmpPicStr.ToLower();

//if(tmpPicStr.IndexOf(".jpg")>0||tmpPicStr.IndexOf(".gif")>0||tmpPicStr.IndexOf(".bmp")>0)

if(tmpPicStrTmp.IndexOf(".jpg")>0||tmpPicStrTmp.IndexOf(".gif")>0||tmpPicStrTmp.IndexOf(".bmp")>0)

{

rePicStr=rePicStr+"||"+tmpPicStr;

intflagN2=tmpPicStr.LastIndexOf("/");

stringfileN2=picHtml+tmpPicStr.Substring(flagN2);

sTotalSubM=sTotalSu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1