如何用vc自动抓取网页,并分析其内容?(像网络蜘蛛那样?) 如何用vc自动抓取网页,并分析其内容?(像网络蜘蛛那样?) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计超级烦, 看你自己的应用了,如果只是要一些特殊的Tag的话,还可以小弄弄 一般而言,大的网站都是使用模版生成的网页,某类网页中一定可以找到独一无二的标记:比如<div xxx="xxx">,或者<td id="XXXX">、<span class="xxxx">之类的,要将网页的内容解析出来是可以的,但很麻烦,我写过一个新闻解析的自动程序,每天定时自动从我定义的各类索引页面中下载信息(包括图片),添加到自己的数据库中,大大节省人力:)讨厌的是,如果你定义的网站更换了模版,你就要改写代码流程通常为:1、定义一个索引库,将索引分类,各类使用各自的解析例程,添加你要去下载的索引,相对固定2、定义一个Url库,将索引页面的更新信息定时取回来,解析成:标题,日期,URL,来源,类别,等,当然还要有一个字段,就是是否已经被下载3、你自己的数据库,从URL库中读取没有下载的,一个一个取下载解析所以你的程序:1、多线程的2、必须首先实现索引解析3、通过索引解析,获取信息页面,进行真实数据的解析,将图片、文字等有用信息放到自己的数据库里 如果你不需要保存原始数据(裸数据)到自己的数据库中,那样的程序是很简单的因为,你只需要分析页面的关键标记,比如<a ..><XXX src=...>等,对这些标记改写并下载资源,存放在本地就OK了,完整地将一个网站下载下来,需要解析的东东不多 http://www.kehui.net/html/article/42/42928.html 你用xmlhttp加webbrowser就好了,这个方法我常使用的http://rabbit.inu.com.cn/这个就是我对csdn的faq页进行分析做出来的,觉得好的话,帮我顶贴,嘿嘿http://community.csdn.net/Expert/topic/4191/4191119.xml?temp=.4787561 1.用BHO插件,通过插件得到文档对象指针2.用WM_HTML_GETOBJECTIHTMLDocument2* pDoc2 = NULL; LRESULT lRes; HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") ); ::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes ); LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") ); if ( pfObjectFromLresult != NULL ) { HRESULT hr; IHTMLDocument2* pDoc; hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc); if ( SUCCEEDED(hr) ) { ..... 还有一个问题,就是如果我要访问网站的某个页面,而这个页面是由上一个页面提交表单产生的结果页面(也就是说这个页面的显式地址是不含有参数的,即不能直接访问得到),那我怎么才能得到这个结果页面呢?除非你对这个结构很了解,用xmlhttp的post方法,去提交,以我自己做的网页为例子,如果你对我的网站很熟悉的话,可以这么做的,比如有用户名,密码的,这个就是对这类蜘蛛的屏蔽,不能所有的东西都让蜘蛛爬到,要那样的话,还要我们干什么的,呵呵其实像我做的蜘蛛,就比较简单了,以前跟另外一个mvp讨论过这个问题,当时我想出来了好多种方法,他叫我用xmlhttp的,我想了想,反正这种方法比较熟悉,就是了 还有结帖的时候给我5分就够,呵呵,我在csdn上的第八个中级用户社区了,昨天拿到了第五个星星了以后如果没什么事的话,会来vc版抢分的 参考msdn.microsoft.com/archive/en-us/samples/internet/browser/walkall/default.asp用mshtml来解析网页 我们现在正在做着方面的,先把网页中得所有链接解析出来,然后用抓取对应的网页,存到数据库,然后把数据库中的网页数据读出来,根据tag进行解析,当然如果你想很完整地分析web页面的话,可以使用DOM模型,vckbase.com上有很多类似的源码。------------------------------------努力学习xslt中... COM接口IHTMLDocument2,有很多现成代码。 HDC所指向的内存为什么都是?????? 兼容dc的怪问题 CDhtmlDialog中如何根据页面的大小动态改变窗口大小? 如何获取外网IP? 如何在主对话框中更新子对话框中的控件信息? 如何获得当前程序的文件名?? 98下,TextOut打印汉字的问题 求教!急!!!如何通过编程实现类似PING 的功能,而且能够得到RELPLY中的准确时间。 请教现在较流行较高效的视频编码方案 请问VC中有没有提取超连接的函数? 大家好,关于directx draw的overlay?急 如何把一个大的10进制数转换为16进制字符串?
讨厌的是,如果你定义的网站更换了模版,你就要改写代码
流程通常为:
1、定义一个索引库,将索引分类,各类使用各自的解析例程,添加你要去下载的索引,相对固定
2、定义一个Url库,将索引页面的更新信息定时取回来,解析成:标题,日期,URL,来源,类别,等,当然还要有一个字段,就是是否已经被下载
3、你自己的数据库,从URL库中读取没有下载的,一个一个取下载解析所以你的程序:
1、多线程的
2、必须首先实现索引解析
3、通过索引解析,获取信息页面,进行真实数据的解析,将图片、文字等有用信息放到自己的数据库里
因为,你只需要分析页面的关键标记,比如<a ..><XXX src=...>等,对这些标记改写并下载资源,存放在本地就OK了,完整地将一个网站下载下来,需要解析的东东不多
2.用WM_HTML_GETOBJECT
IHTMLDocument2* pDoc2 = NULL;
LRESULT lRes;
HINSTANCE hInst = ::LoadLibrary( _T("OLEACC.DLL") ); UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout(hWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
IHTMLDocument2* pDoc;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&pDoc);
if ( SUCCEEDED(hr) )
{
.....
用mshtml来解析网页
------------------------------------
努力学习xslt中...