代码解说一个网络爬虫的实现过程(一) http://www.it-park.cn/Group/TopicInfo.aspx?TopicIndex=6

代码解说一个网络爬虫的实现过程(一)


2007-10-29 15:48:48
-


会对这个话题感兴趣的兄弟,估计就不用我解释什么是网络爬虫了。呵~简单带一下:

网络爬虫,俗称蜘蛛,是一种自动化程序,能够抓取互联网上各站点的网页回来。之所以得以名,应该是把互联网比喻成一个由超链接组成的网,爬虫就可以从一个起始的链接开始,不断的地爬数据回来。

 

这个层次上讲,只要你给它一个入口,它就可以给你一个互联网。因为网络是连通的。但是,这是理论上的问题。

 

好了,回到正题,说说一个简单的爬虫的实现,及一些相关的技术点,以及在window平台下用C++如何实现它。

1)  爬行:

上网浏览是基于http协议80端口,发出各种GET or POST命令,网站服务器会响应合法的请求,并返回数据回来,所以,爬虫的工作基础就是不断去请求数据回来。

有两种方法,一种是自己封装socket ,模拟HTTP协议请求,去获取数据,实现有一复杂性,要求你对TCP/Ip协议比较了解,但优点是自己做到可控,且优化空间大;第二种方法是MS大佬已经提供操作应用层协议的库,包括HTTPFTP等常用协议。它就是Winnet.

 

m_hHandleOpen = InternetOpen("InetURL/1.0",

         INTERNET_OPEN_TYPE_PRECONFIG,

         NULL,

         NULL,

         INTERNET_FLAG_DONT_CACHE/*0/*INTERNET_FLAG_ASYNC*/);//从缓存中读文件

 

     if( m_hHandleOpen == 0 )

     {

         cout<<"InternetOpen Url "<< m_strUrl<<"error!!!"<<GetLastError()<<endl;

         OnTaskFailed();

         return;

     }

 

     int nTimeOut = 3000;

     ::InternetSetOption( m_hHandleOpen, INTERNET_OPTION_CONNECT_TIMEOUT , &nTimeOut, sizeof( nTimeOut ) );

  

     m_hFile = InternetOpenUrl( m_hHandleOpen,

         strUrl.c_str(),

         NULL, 0, 0, 0 );

         if( m_hFile == NULL )

     {

         cout<<"OperUrl Error:"<<GetLastError()<<endl;

}

if ( m_hFile )

     {

         do

         {

              memset( pBuf, 0, sizeof(BYTE)*BUFSIZE );

              bRead = InternetReadFile( m_hFile, pBuf, sizeof(BYTE)*BUFSIZE, &dwNum);    //

              //读取BUFSIZE 字节时,进行查找html,找不到html 标识,认为不是HTML 页面

              strBuf += (char*)pBuf;

         }while ( bRead && dwNum > 0 );

}

delete[]pBuf;

 

InternetCloseHandle( m_hFile);

InternetCloseHandle( m_hHandleOpen );

以上几个API就可以完成页面的爬取工作了。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值