获取网站源代码,shell获取网页源码

  获取网站源代码,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

获取网站源代码,shell获取网页源码