获取当前网页的所有连接
// getURLS.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <map> #include <string> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { const char* filepath=".\\test.htm"; //网页文件路径 map<string,int> mapLink; //容器用于存放抽取出来的链接和计数 string line; //一行数据 string htmlcontent; //html文件内的所有内容 ifstream readfile(filepath); if(!readfile) //打开文件失败 { cout<<"打开文件失败!"<<endl; getchar(); return 0; } else { while(getline(readfile,line)) //一行行读取html文件 { htmlcontent+=line+"\n"; } string::size_type st1,st2; string strlink; //一条链接 string baseurl; //基准url,用于相对路径 st1=htmlcontent.find("base href=\""); st2=htmlcontent.find("\"",st1+11); if(st1!=string::npos&&st2!=string::npos) { baseurl=htmlcontent.substr(st1+11,st2-(st1+11)); } st1=0; while(true) //抽取出链接 { st1=htmlcontent.find("href=\"",st1); //找到链接的开始标记href=" if(st1!=string::npos) //若存在链接 { st2=htmlcontent.find("\"",st1+6); //找到链接的结束标记" strlink=htmlcontent.substr(st1+6,st2-(st1+6)); //截取子字符串,即链接 if(strlink.find("http://")!=0) //不是以http://开头的链接加上baseurl { if(!baseurl.empty()) { strlink=baseurl+strlink; } else { strlink.erase(); st1=st2+1; continue; } } mapLink[strlink]++; //将链接加入容器,并计数 strlink.erase(); st1=st2+1; } else { break; } } for(map<string,int>::iterator it=mapLink.begin();it!=mapLink.end();it++) { cout<<it->first<<"---计数:"<<it->second<<endl; } } getchar(); return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。