// 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;
}
获取当前网页的所有连接,布布扣,bubuko.com
获取当前网页的所有连接