您的位置:首页 > 理论基础 > 计算机网络

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

2007-10-29 16:14 751 查看

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




2007-10-29 15:48:48
-

会对这个话题感兴趣的兄弟,估计就不用我解释什么是网络爬虫了。呵~简单带一下:
网络爬虫,俗称蜘蛛,是一种自动化程序,能够抓取互联网上各站点的网页回来。之所以得以名,应该是把互联网比喻成一个由超链接组成的网,爬虫就可以从一个起始的链接开始,不断的地爬数据回来。

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

好了,回到正题,说说一个简单的爬虫的实现,及一些相关的技术点,以及在window平台下用C++如何实现它。
1) 爬行:
上网浏览是基于http协议80端口,发出各种GET or POST命令,网站服务器会响应合法的请求,并返回数据回来,所以,爬虫的工作基础就是不断去请求数据回来。
有两种方法,一种是自己封装socket ,模拟HTTP协议请求,去获取数据,实现有一复杂性,要求你对TCP/Ip协议比较了解,但优点是自己做到可控,且优化空间大;第二种方法是MS大佬已经提供操作应用层协议的库,包括HTTP,FTP等常用协议。它就是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就可以完成页面的爬取工作了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐