描述:
在此先说声谢谢~~
用户输入:一个互联网URL
功能:1、分析URL所在文件的所有链接,包括图片链接、网页链接、脚本以及其它,并且将所有分析到文件下载下来,保存在 本地,,再将所有链接用链表的形式保存。
2、将链表中网页连接的url作为新的一个主URL,重复功能1,知道满足深度要求停止工作。
我现在的思路:
使用Microsoft WebBrowser控件的navigate(url)函数来加载url,然后GetDocument函数加载文档,然后用Com自带的get_href(&String)来分析链接(个人感觉分析不是很全),具体实现代码
TCHAR HostName[2*MAX_PATH];
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComPtr<IHTMLElementCollection> pElementCol,pElementIMG;
CComPtr<IHTMLAnchorElement> pLoct;
//m_ex.Navigate("http://www.baidu.com",NULL,NULL,NULL,NULL);
//Sleep(2000);
IDispatchPtr spDisp;
spDisp = m_ex.GetDocument();
pDoc2 = spDisp;
if (SUCCEEDED(pDoc2->get_links(&pElementCol)))
{
// AfxMessageBox("IHTMLElementCollection");
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{
m_LinksNum = m_LinksNum+p;
UpdateData(FALSE);
for(long i=0;i<=(p-1);i++)
{
if(i==21)
i=21;
CComBSTR String;
_variant_t index = i;
TRY
{
pElementCol->item( index, index, &spDispatch);
spDispatch->QueryInterface( IID_IHTMLAnchorElement,(void **) &pLoct);
if(pLoct)
pLoct->get_href(&String);
}
CATCH_ALL(e) {}
END_CATCH_ALL
ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
//添加到列表
m_LinksList.InsertItem(i,HostName);
m_LinksList.SetCheck(i,TRUE);
if(pLoct)
pLoct->get_hostname(&String);
ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
if(lstrlen(HostName))
{
m_LinksList.SetItemText(i,1,HostName);
Log(HostName );
Log("\r\n");
}
spDispatch.Release();
pLoct.Release();
}
}
解决方案1:
首先需要一个巨大的存储空间,来设计一个合适高效的数据管理系统
解决方案2:网是又爬虫的介绍,http://subject.csdn.net/spider.htm
解决方案3:lz要的是得到一个网页上的所有链接地址???