获取当前网页的所有连接

// 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;
}

获取当前网页的所有连接,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。