如何提取网页中所有链接(C++) 转载
IE有几个有用的接口,我们可以用它来提取网页所有链接。
一、基本原理
首先是用IHTMLDocument2的get_links,来获取IHTMLElementCollection接口,再通过IHTMLElementCollection来获取IHTMLAnchorElement,而IHTMLAnchorElement接口的get_href就是我们想要的,通过循环获取,我们就可以得到网页的所有链接了!
二、具体代码
{
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++) 转载相关推荐
- 【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接
关于HtmpParser的基本内容请见 HtmlParser基础教程 本文示例用于提取HTML文件中的链接 package org.ljh.search.html;import java.util.H ...
- 如何提取网页中所有链接
见过"网际快车"的"使用网际快车下载全部链接"这个功能吗?想实现它,我们可以这样做: IE有几个有用的接口,我们可以用它来提取网页所有链接. 一.基本原理 首先 ...
- html抓取网址某链接,URL 筛选小工具 提取网页中的链接地址
http://blog.360dseo.com/html/826.html 作者: 不详 发布时间:2014-4-23 16:46:19 这个VBS是用来将一个本地网页中的URL筛选出来并保存在新的网 ...
- 提取网页中的链接并生成xml
2019独角兽企业重金招聘Python工程师标准>>> using System; using System.Xml; using System.Text; using System ...
- HtmlParser提取网页中的纯文本信息
转载自 HtmlParser提取网页中的纯文本信息 HTMLParser 一个解析web页面的开源类库. 准备学习下搜索方面的技术,就学习了些网络爬虫的知识.最近一直在一个点上 ...
- node.js用get方式获取网页中的链接
2019独角兽企业重金招聘Python工程师标准>>> get方式获取网页中的链接 var http = require('http');//定义函数 var getAHref = ...
- Python小应用1 - 抓取网页中的链接地址
看到一篇博文上讲到用Python写自动访问博客的功能,里面的核心功能就是抓取网页中的链接,类似一个网页爬虫工具.正好我刚学习Python,就决定自己练习一下.写了一下,原本觉得很简单的东西,搞了半天才 ...
- java提供图片链接,提取网页的图片链接的Java程序
提取网页的图片链接的Java程序 输入网页文件名,和资源列表文件名 输出资源列表文件供迅雷下载. 适用于批量下载图片. 由两个文件组成. 没有提供网页下载功能,因为我没有时间写,相关的代码以后再贴. ...
- 快速提取网页中的文字
有时需要提取网页中的文字.除了使用"复制+粘贴"的方法外,还有其他办法. 打开"https://www.easyscrape.xyz/"后,在 ...
最新文章
- GPT2文本生成有问题?这里有些潜在解决思路
- git在实际开发中的应用
- Xcode中StaticLibrary和Framework的共同点和区别
- 2018年第41周-sparkSql搭建及配置
- MySQL 的CASE WHEN 语句
- 系统状态检测 及进程控制
- Linux下MySQL的简单使用(一)
- POJ 2778 DNA Sequence(AC自动机 + 矩阵快速幂)题解
- 设计模式-----桥接模式(Bridge Pattern)(转)
- Linux栈溢出漏洞原理,盘它!PWN栈溢出漏洞。
- SylixOS Makefile 源代码解析
- 数据库交易记录--如何添加审计信息到闪回归档数据以替换操作日志表
- Latex数学符号输入大全
- cron每小时执行一次_crontab每小时运行一次
- 168640-82-2,Azide-PEG4-Tos含有叠氮化物(N3)基团和对甲苯磺酰基的杂功能交联剂
- sql server中datename函数的使用
- 基于语音控制的智能家居实现
- TransReID学习记录
- ZTE2020傅里叶祭品传递题解
- 使用TurboMail邮件系统的智能公文模块