获取网站源代码,shell获取网页源码
Linux操作系统操作系统获取网页源码的几种方法-遗世之都-伊泰耶技术网站
Linux操作系统操作系统获取网页源码的几种方法
LinuxSocketChromeCC JavaEye博客还是本科做毕业设计时候开通的,基本上荒废了,现在决定记录下平时编程遇到的问题或者解决方案。
第一个为利用Linux操作系统操作系统下的工具来获取网页源码,我用的是Wget,也可以使用卷曲,卷曲的话更加的灵活,可以设置很多参数
C代码//通过Wget来获取网页stringgethtmlbyget(字符串URL){//获取待下载网页文件名字符串文件名=URL。substr((int)URL。find _ last _ of(/)1);如果(文件名!= ){ string strcom= wget-q ;//wget命令,-问表示不显示下载信息strcom。追加(URL);系统(strcom。c _ str());//执行wgetifstreamfin(文件名。c _ str());如果(!fin){ return " ";} stringstrHtml=charchTemp[1024]=" ";//读取网页文件到内存中while(fin.getline(chTemp,1024)){ strhtml .append(string(chTemp));strcpy(chTemp, );} fin。close();strCom= RM-f ;//删除文件命令,-f表示直接删除不做任何提示strCom.append(文件名);系统(strcom。c _ str());//删除刚才下载下来的文件returnstrHtml//返回网页源码} else { return}}//通过Wget来获取网页
字符串GetHtmlByWget(字符串网址)
//获取待下载网页文件名
字符串文件名=URL。substr((int)URL。find _ last _ of(/)1);
如果(文件名!=)
string strCom= wget-q ;//wget命令,-问表示不显示下载信息
strcom。追加(URL);
系统(strcom。c _ str());//执行工具
ifstream fin(文件名。c _ str());
如果(!鳍)
返回"";
字符串strHtml=
char chTemp[1024]=" ";
//读取网页文件到内存中
while(fin.getline(chTemp,1024))
strhtml。append(string(chTemp));
strcpy(chTemp, );
鳍。close();
strCom= RM-f ;//删除文件命令,-f表示直接删除不做任何提示
strCom.append(文件名);
系统(strcom。c _ str());//删除刚才下载下来的文件
返回strHtml//返回网页源码
其他
返回"";
第二个是用的窝的来获取源码
C代码//通过得到获取网页源码stringGetHtmlByGet(字符串URL){ stringsrhtmlcontent=" ";intsockfdstructsockaddr _ inaddstructhostent * pURLchartext[RECVBUF];//分析链接UrlInfourlInfo=解析URL(URL);string Accept= Accept:*/* r n cept-Language:zh-cn r n cept-Encoding:gzip,deflate ;//不同的主机用户代理不同字符串用户代理= Mozilla/5.0(X11;u;linuxi 686 en-US)apple WebKit/534.10(KHTML,像壁虎)Chrome/8。0 .552 .224 safari/534.10 ;//将端口转换为字符串图表[6];stringsrportsprintf(t, %d ,urlInfo .港口);strPort=t;//构造发送字符串string strrequest=str请求。append( GET );strRequest.append(urlInfo .文件);strRequest.append(?)));strRequest.append(urlInfo .体);str请求。append( HTTP/1.1 r n );str请求。append(sAccept);str请求。追加( r n用户代理:);str请求。append(suser代理);str请求。追加( r n主机:);strRequest.append(urlInfo .主持人);str请求。追加(:);strrequestappend(strPort);strrequestappend( r n连接:Keep-Alive r n r n );char * host=const _ cast char *(urlInfo .主持人。c _ str());sockfd=socket(AF_INET,SOCK_STREAM,IP proto _ TCP);//TCP方式发送pURL=gethostbyname(主机);addr.sin _ family=AF _ INETaddr。sin _ addr。s _ addr=*((无符号long *)pURL-h _ addr);地址。sin _ port=htons(80);//连接connect(sockfd,(structsockaddr*) addr,sizeof(addr));//发送send(sockfd,const _ cast char *(str请求。c _ str()),strRequest.length(),0);//接受while(recv(sockfd,text,RECVBUF,0)0){ strhtmlcontent。追加(文本);bzero(text,RECVBUF);}//关闭插座关闭(sockfd);//返回接受结果returnstrHtmlContent}//通过得到获取网页源码
字符串GetHtmlByGet(字符串网址)
string strHtmlContent=
int sockfd
结构sockaddr _ in地址
结构主机* pURL
char text[RECVBUF];
//分析链接
UrlInfo UrlInfo=解析URL(网址);
string sa cept= Accept:*/* r n cept-Language:zh-cn r n cept-Encoding:gzip,deflate ;
//不同的主机用户代理不同
string suser agent= Mozilla/5.0(X11;u;Linux i686en-US)apple WebKit/534.10(KHTML,像壁虎一样)Chrome/8。0 .552 .224 Safari/534.10 ;
//将端口转换为字符串
char t[6];
字符串strPort
sprintf(t, %d ,urlInfo .港口);
strPort=t;
//构造发送字符串
string str request=
str请求。append( GET );
strRequest.append(urlInfo .文件);
strRequest.append(?)));
strRequest.append(urlInfo .体);
str请求。append( HTTP/1.1 r n );
str请求。append(sAccept);
str请求。追加( r n用户代理:);
str请求。append(suser代理);
str请求。追加( r n主机:);
strRequest.append(urlInfo .主持人);
str请求。追加(:);
strrequestappend(strPort);
strrequestappend( r n连接:Keep-Alive r n r n );
char * host=const _ cast char *(urlInfo .主持人。c _ str());
sockfd=socket(AF_INET,SOCK_STREAM,IP proto _ TCP);//TCP方式发送
pURL=gethostbyname(主机);
地址. sin _ family=AF _ INET
addr.sin_addr.s_addr=*(无符号long *)pURL-h _ addr);
地址。sin _ port=htons(80);
//连接
connect(sockfd,(struct sockaddr *) addr,sizeof(addr));
//发送
send(sockfd,const _ cast char *(str请求。c _ str()),strRequest.length(),0);
//接受
while(recv(sockfd,text,RECVBUF,0) 0)
strHtmlContent.append(文本);
bzero(text,RECVBUF);
//关闭窝
关闭(sockfd);
//返回接受结果
返回strHtmlContent
使用网络库
爪哇代码#包含stdio。h #包含字符串。h #包括卷曲/卷曲。h # define MAX _ BUF 65536 charwr _ BUF[MAX _ BUF 1];intwr _ index/* * Writedatacallbackfunction(calledwithinthecontextof * curl _ easy _ perform .*/size_twrite_data(void*buffer,size_tsize,size _ TN member,void * userp){ intsegsize=size * nmemb;/* checktoseeifthisdata超过了缓冲区得强度.如果是这样,* settheuser-definedcontextvalueandreturn 0 oindicatea * problemtocurl .*/if(wr _ index segsize MAX _ BUF){ *(int *)userp=1;return 0 }/* copythedatafromthecurlbufferrintourbuffer */memcpy((void *)wr _ buf[wr _ index],buffer,(size _ t)segsize);/* Updatethewriteindex */wr _ index=segsize;/* Nullterminatethebuffer */wr _ buf[wr _ index]=0;/* returnthenumberofbytes已接收,表示curlthatalisok */returnsegsize;}/* * simplecurlaplicatoreadtheindex。html filefromawebsite。*/int main(void){ CURL * CURL;CURLcoderetintwr _ error wr _ error=0;wr _ index=0;/*第一步,init curl */curl=curl _ easy _ init();如果(!curl){ printf( could TiNi turl n );return 0 }/* tellcurltheflofthefilewe reggoingtoretrieve */curl _ easy _ set opt(curl,CURLOPT_URL, www .示例域。com’);/*Tellcurlthatwe 将接收llreceivedatatofunctionwrite _ data,以及* alsovideitwithacontextpointerforourerrorreturn .*/curl_easy_setopt(curl,CURLOPT_WRITEDATA,(void *)wr _ error);curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write _ data);/* allowcurltoperformatteaction */ret=curl _ easy _ perform(curl);printf( ret=% d(write _ error=% d) n ,ret,wr _ error);/* emitthepageifcurrindicatestatnoerrorsoccured */if(ret==0)printf( % s n ,wr _ buf);curl _ easy _ clean up(卷曲);返回0