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

一、基本原理

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

二、具体代码

Code
{
TCHAR HostName[2*MAX_PATH];
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComPtr<IHTMLElementCollection> pElementCol;
CComPtr<IHTMLAnchorElement> 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");
}
}
}
}
}
}
}
}
}

本程序在VC7+WINXP下编译通过,详细请看源代码!

如何提取网页中所有链接(C++) 转载相关推荐

  1. 【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接

    关于HtmpParser的基本内容请见 HtmlParser基础教程 本文示例用于提取HTML文件中的链接 package org.ljh.search.html;import java.util.H ...

  2. 如何提取网页中所有链接

    见过"网际快车"的"使用网际快车下载全部链接"这个功能吗?想实现它,我们可以这样做: IE有几个有用的接口,我们可以用它来提取网页所有链接. 一.基本原理 首先 ...

  3. html抓取网址某链接,URL 筛选小工具 提取网页中的链接地址

    http://blog.360dseo.com/html/826.html 作者: 不详 发布时间:2014-4-23 16:46:19 这个VBS是用来将一个本地网页中的URL筛选出来并保存在新的网 ...

  4. 提取网页中的链接并生成xml

    2019独角兽企业重金招聘Python工程师标准>>> using System; using System.Xml; using System.Text; using System ...

  5. HtmlParser提取网页中的纯文本信息

    转载自   HtmlParser提取网页中的纯文本信息 HTMLParser 一个解析web页面的开源类库.           准备学习下搜索方面的技术,就学习了些网络爬虫的知识.最近一直在一个点上 ...

  6. node.js用get方式获取网页中的链接

    2019独角兽企业重金招聘Python工程师标准>>> get方式获取网页中的链接 var http = require('http');//定义函数 var getAHref = ...

  7. Python小应用1 - 抓取网页中的链接地址

    看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具.正好我刚学习Python,就决定自己练习一下.写了一下,原本觉得很简单的东西,搞了半天才 ...

  8. java提供图片链接,提取网页的图片链接的Java程序

    提取网页的图片链接的Java程序 输入网页文件名,和资源列表文件名 输出资源列表文件供迅雷下载. 适用于批量下载图片. 由两个文件组成. 没有提供网页下载功能,因为我没有时间写,相关的代码以后再贴. ...

  9. 快速提取网页中的文字

    有时需要提取网页中的文字.除了使用"复制+粘贴"的方法外,还有其他办法.          打开"https://www.easyscrape.xyz/"后,在 ...

最新文章

  1. GPT2文本生成有问题?这里有些潜在解决思路
  2. git在实际开发中的应用
  3. Xcode中StaticLibrary和Framework的共同点和区别
  4. 2018年第41周-sparkSql搭建及配置
  5. MySQL 的CASE WHEN 语句
  6. 系统状态检测 及进程控制
  7. Linux下MySQL的简单使用(一)
  8. POJ 2778 DNA Sequence(AC自动机 + 矩阵快速幂)题解
  9. 设计模式-----桥接模式(Bridge Pattern)(转)
  10. Linux栈溢出漏洞原理,盘它!PWN栈溢出漏洞。
  11. SylixOS Makefile 源代码解析
  12. 数据库交易记录--如何添加审计信息到闪回归档数据以替换操作日志表
  13. Latex数学符号输入大全
  14. cron每小时执行一次_crontab每小时运行一次
  15. 168640-82-2,Azide-PEG4-Tos含有叠氮化物(N3)基团和对甲苯磺酰基的杂功能交联剂
  16. sql server中datename函数的使用
  17. 基于语音控制的智能家居实现
  18. TransReID学习记录
  19. ZTE2020傅里叶祭品传递题解
  20. 使用TurboMail邮件系统的智能公文模块

热门文章

  1. MySQL数据库常见存储引擎(一)
  2. 40个非常有创意的国外LOGO欣赏(上)
  3. 推测用户行为 程序员分享Android开发经验
  4. 数据分析和数据挖掘有什么区别
  5. Node.js跨域请求解决方案
  6. java开发总结_java开发几点总结
  7. python字符串常用函数-Python字符串常用函数详解
  8. C# 笔记1 - 操作目录
  9. html单选按钮选中后取消选中,jquery实现单选按钮选中与取消选中
  10. cad字体hztxt用什么代替_为什么CAD的字体库相同但打开图纸的效果却不同?