织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 行业动态 > 『互联网』 >

如何提取网页中所有链接

罗索客 发布于 2008-07-11 10:22 点击:次 
关键字: Thunk 控件 动态创建控件 软件框架 框架 存取插件 本文详细介绍如何提取网页中所有链接 见过“网际快车”的“使用网际快车下载全部链接”这个功能吗?想实现它,我们可以这样做: IE有几个有用的接口,我们可以用它来提取网页所有链接。 一、基本原理 首先是
TAG:

关键字: Thunk 控件 动态创建控件 软件框架 框架 存取插件
本文详细介绍如何提取网页中所有链接

见过“网际快车”的“使用网际快车下载全部链接”这个功能吗?想实现它,我们可以这样做:

  IE有几个有用的接口,我们可以用它来提取网页所有链接。

  一、基本原理

  首先是用IHTMLDocument2的get_links,来获取IHTMLElementCollection接口,再通过 IHTMLElementCollection来获取IHTMLAnchorElement,而IHTMLAnchorElement接口的 get_href就是我们想要的,通过循环获取,我们就可以得到网页的所有链接了!

  二、具体代码
{
  TCHAR HostName[2*MAX_PATH];
  CComPtr spDispatch;
  CComQIPtr pDoc2;
  CComPtr pElementCol;
  CComPtr pLoct;
  // TODO: Add your control notification handler code here
  int n = m_LinksList.GetItemCount();//GetCount();
  for (int i = 0; i < n; i ++){
    IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_LinksList.GetItemData(i);
    if (pBrowser){
      pBrowser->Release();
    }
  }
  m_LinksList.DeleteAllItems();
  m_LinksNum = 0;
  Log("**************************************************************");
  Log("\\r\\n");
  if (m_spSHWinds){
    int n = m_spSHWinds->GetCount();
    for (int i = 0; i < n; i++){
      _variant_t v = (long)i;
      IDispatchPtr spDisp = m_spSHWinds->Item(v);
      SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);  //生成一个IE窗口的智能指针
      if (spBrowser){
        if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
          pDoc2 = spDispatch;
        if(pDoc2!=NULL)
        {
          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++)
                {
                  BSTR String;
                  _variant_t index = i;
                  if(SUCCEEDED(pElementCol->item( index, index, &spDispatch)))
                  if(SUCCEEDED(spDispatch->QueryInterface( IID_IHTMLAnchorElement,(void **) &pLoct)))
                  pLoct->get_href(&String);
                  ZeroMemory(HostName,2*MAX_PATH);
                  lstrcpy(HostName,_bstr_t(String));
                  m_LinksList.InsertItem(i,HostName);
                  m_LinksList.SetCheck(i,TRUE);
                 
                  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");
                  }
                  
                }
              }
          }
        }
      }
    }
  }
}

点击浏览该文件 (ixmy)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/200807/7071.html]
本文出处: 作者:ixmy
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容