用VC如何获取某一网页上的所有链接?? 他们是 ole拖放技术,并不是能找到超连接 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分析页面文件,如找到<a href ... >XXX</a>之类的特征串就把其中的URL地址分离出来,这需要一定的HTML知识,不过不是很难。我记得有一个控件是专门分析HTML页面的,忘了叫什么了:)不过如果你只是想找超链接,自己写一个应该不难。 WebBrowser控件即可。用WebBrowser装入或访问该页面,然后取得属性Document,就可以访问Anchors获得该页面所有的超链接了。 Muf(沐枫): 大侠高见。 只是我觉得WebBrowser好象太占资源了,不知是不是这样。 To: runbuff(玩火人)如果你的页面已经在IE中了,那大可不必重新建一个WebBrowser控件,直接访问那个IE中的HTMLDocument就可以了。 Muf(沐枫): 谢谢。 我是想做一个类似于“网站打包下载”之类的东西,页面并非在IE中,而是作为一个文本文件或一个长字符串,想从中找出所有链接,有没有比WebBrowser更好的方法呢? To: runbuff(玩火人) 当然有。 超链接的语法比较简单。因此,使用正则表达式查找是很有效的。 只要你构造出合适的表达式,就可以很容易把它们都找出来。 这个程序可以帮你。#include <stdio.h>#include <afx.h>#include <afxwin.h>#include <afxinet.h>#include <iostream.h>#include <stdlib.h>// 进行大小写无关的查找,找到返回起始位置,否则返回-1int CaseIgnoreStrStr(char *srcstr, char *substr){ char *buffer, *p, *substrupper; buffer = _strupr(_strdup(srcstr)); substrupper = _strupr(_strdup(substr)); p = strstr(buffer, substrupper); if (p==NULL) return -1; else return p - buffer;}// parse the url from one line of the homepageint ParseUrlFrom(char *line, char *url){ char *p1, *p2; char tmp[1024]; int i = 0, index = 0; memset(tmp, 0, sizeof(tmp)); p1 = NULL; p2 = NULL; index = CaseIgnoreStrStr(line, "HREF"); if (index==-1) return -1; p1 = line + index; p1 = p1 + 4; // go over the 'href' index = CaseIgnoreStrStr(p1, "HTTP://"); if (index==-1) // stile pages on this server return -1; else // point to a new web site { p2 = p1 + index; while ((*p2!='"')&&(*p2!=' ')&&(*p2!='>')&&(*p2!=0x0a) &&(*p2!=0x0d)&&(*p2!=0)&&(*p2!='#')&&(*p2!='\'')) { *url = *p2; url ++; p2 ++; } } return 0;}int main(int argc , char *argv[]){ FILE *f; char buffer[1024], url[1024]; f = fopen(argv[1], "r"); if (f==NULL) return -1; fgets(buffer, sizeof(buffer), f); while(!feof(f)) { memset(url, 0, sizeof(url)); if (ParseUrlFrom(buffer, url)==0) printf("%s\n", url); fgets(buffer, sizeof(buffer), f); } fclose(f); return 0;} search this article in MSDN:Shell Support for Dynamic HTML http://www.csdn.net/expert/topic/699/699563.xml?temp=.2848322 /////////////////////////////////////////////////////////////////////////////////////////change_anchor_href///////////////////////////////////////////////////////////////////////////////////////void change_anchor_href(){ //CComQIPtr<IWebBrowser2> m_spBrowser; HRESULT hr; if (m_spBrowser != NULL) { IDispatchPtr spDisp=NULL; hr=m_spBrowser->get_Document(&spDisp); if(SUCCEEDED(hr)&& spDisp!= NULL ) { IHTMLDocument2Ptr spHtmlDocument(spDisp); IHTMLElementPtr spHtmlElement; spHtmlDocument->get_body(&spHtmlElement); IHTMLElementCollection* pColl=NULL; hr=spHtmlDocument->get_all(&pColl); if(pColl!=NULL&&SUCCEEDED(hr)) { IHTMLElement* pElem=NULL; _variant_t index; index.vt=VT_I4; IDispatchPtr disp; long num; hr=pColl->get_length(&num); if(SUCCEEDED(hr)) { for(long i=0;i<num;i++) { index.intVal=i; hr=pColl->item(index,index,&disp); IHTMLAnchorElementPtr pAnchorElement; if(SUCCEEDED(hr)&&disp!=NULL) { hr=disp->QueryInterface(&pAnchorElement); } if (SUCCEEDED(hr)&& pAnchorElement != NULL) { pAnchorElement->put_href(_bstr_t("c:\\tmp\\link.htm")); } } } pColl->Release(); } } }} visual studio 2012哪位安装过了,好用不? 求教~关于位图放大失真的原因 请问怎么用safearray在ATL中传递结构体数组 求助:背景减法和判断色彩值的两个程序 新手提问:用ATL写Socket和用SDK写的区别 关于ini文件的读写. 这种错误类型指的是哪种错误啊,请教? 求:CString和UTF8相互转换的源码。或者帮忙查询下面代码哪里错了。谢谢。 各位老大,怎样把RGB值转换成Color,---??? 程序运行多次之后出现该内存不能为“written” vc中mysql急问 请问在什么叫做本垒打?
不过如果你只是想找超链接,自己写一个应该不难。
用WebBrowser装入或访问该页面,
然后取得属性Document,就可以访问Anchors获得该页面所有的超链接了。
大侠高见。
只是我觉得WebBrowser好象太占资源了,不知是不是这样。
如果你的页面已经在IE中了,那大可不必重新建一个WebBrowser控件,直接访问那个IE中的HTMLDocument就可以了。
谢谢。
我是想做一个类似于“网站打包下载”之类的东西,页面并非在IE中,而是作为一个文本文件或一个长字符串,想从中找出所有链接,有没有比WebBrowser更好的方法呢?
当然有。
超链接的语法比较简单。因此,使用正则表达式查找是很有效的。
只要你构造出合适的表达式,就可以很容易把它们都找出来。
#include <stdio.h>
#include <afx.h>
#include <afxwin.h>
#include <afxinet.h>#include <iostream.h>
#include <stdlib.h>// 进行大小写无关的查找,找到返回起始位置,否则返回-1
int CaseIgnoreStrStr(char *srcstr, char *substr)
{
char *buffer, *p, *substrupper; buffer = _strupr(_strdup(srcstr));
substrupper = _strupr(_strdup(substr)); p = strstr(buffer, substrupper);
if (p==NULL)
return -1;
else
return p - buffer;
}
// parse the url from one line of the homepage
int ParseUrlFrom(char *line, char *url)
{
char *p1, *p2;
char tmp[1024];
int i = 0, index = 0;
memset(tmp, 0, sizeof(tmp)); p1 = NULL;
p2 = NULL;
index = CaseIgnoreStrStr(line, "HREF");
if (index==-1)
return -1; p1 = line + index;
p1 = p1 + 4; // go over the 'href'
index = CaseIgnoreStrStr(p1, "HTTP://");
if (index==-1) // stile pages on this server
return -1;
else // point to a new web site
{
p2 = p1 + index;
while ((*p2!='"')&&(*p2!=' ')&&(*p2!='>')&&(*p2!=0x0a)
&&(*p2!=0x0d)&&(*p2!=0)&&(*p2!='#')&&(*p2!='\''))
{
*url = *p2;
url ++;
p2 ++;
}
} return 0;
}int main(int argc , char *argv[])
{
FILE *f;
char buffer[1024], url[1024]; f = fopen(argv[1], "r");
if (f==NULL)
return -1; fgets(buffer, sizeof(buffer), f);
while(!feof(f))
{
memset(url, 0, sizeof(url));
if (ParseUrlFrom(buffer, url)==0)
printf("%s\n", url);
fgets(buffer, sizeof(buffer), f);
} fclose(f);
return 0;
}
Shell Support for Dynamic HTML
//change_anchor_href
///////////////////////////////////////////////////////////////////////////////////////
void change_anchor_href()
{
//CComQIPtr<IWebBrowser2> m_spBrowser;
HRESULT hr;
if (m_spBrowser != NULL)
{
IDispatchPtr spDisp=NULL;
hr=m_spBrowser->get_Document(&spDisp);
if(SUCCEEDED(hr)&& spDisp!= NULL )
{
IHTMLDocument2Ptr spHtmlDocument(spDisp);
IHTMLElementPtr spHtmlElement;
spHtmlDocument->get_body(&spHtmlElement);
IHTMLElementCollection* pColl=NULL;
hr=spHtmlDocument->get_all(&pColl);
if(pColl!=NULL&&SUCCEEDED(hr))
{
IHTMLElement* pElem=NULL;
_variant_t index;
index.vt=VT_I4;
IDispatchPtr disp;
long num;
hr=pColl->get_length(&num);
if(SUCCEEDED(hr))
{
for(long i=0;i<num;i++)
{
index.intVal=i;
hr=pColl->item(index,index,&disp);
IHTMLAnchorElementPtr pAnchorElement;
if(SUCCEEDED(hr)&&disp!=NULL)
{
hr=disp->QueryInterface(&pAnchorElement);
}
if (SUCCEEDED(hr)&& pAnchorElement != NULL)
{
pAnchorElement->put_href(_bstr_t("c:\\tmp\\link.htm"));
} }
}
pColl->Release();
}
}
}
}