打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C++网页抓取
     如何抓取一个网页内容,大家可能对于php的操作很熟悉了吧,php的话很多方法,CURL、file_get_contents等方法,但是C++又是怎样做呢?效率咋样呢?其实,抓取的速度,受你PC机的带宽或是服务器的带宽影响很大.....
     贴代码:

#include<windows.h>
#include<Wininet.h>
#include<iostream>
#include<fstream>
#include<string>
#include<time.h>
#pragma comment(lib,"WinInet.lib")
using namespace std;

int main()
{
clock_t start, finish;
double use_time;
start = clock(); //开始计时
HINTERNET hINet, hHttpFile;
char szSizeBuffer[32];
DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
hINet = InternetOpen("IE6.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 ); //InternetOpen初始化WININET.DLL
string url = "http://www.jyu.edu.cn"; //目标网页

if ( !hINet )
{
cout << "InternetOpen fail" << endl;
return 1;
}

hHttpFile = InternetOpenUrl(hINet, url.c_str(), NULL, 0, 0, 0); //这个函数连接到一个网络服务器上并且最被从服务器上读取数据

if(!hHttpFile)
{
cout << "error open url" << endl;
return 1;
}

BOOL bQuery = HttpQueryInfo(hHttpFile,
HTTP_QUERY_CONTENT_LENGTH,
szSizeBuffer,
&dwLengthSizeBuffer, NULL); //得到关于文件的信息

if(bQuery ==false)
{
InternetCloseHandle(hINet);
cout << "error query info" << endl;
return 3;
}

int FileSize=atol(szSizeBuffer); //atol函数把字符串转换成长整型数
string revData;
revData.resize(FileSize);

DWORD dwBytesRead;
BOOL bRead = InternetReadFile(hHttpFile, &revData[0], FileSize, &dwBytesRead); //web浏览器将在InternetReadFile上循环 ,不停地从Internet上读入数据块。

if(!bRead)
{
cout << "error to read file" << endl;
return 4;
}

ofstream out_file("jyu.html");
out_file << revData; //输出到文件
InternetCloseHandle(hHttpFile); //关闭句柄
InternetCloseHandle(hINet);
finish = clock();
use_time = (double)(finish - start) / CLOCKS_PER_SEC;
cout << "爬虫抓取地址为:" << url << endl;
cout << "页面抓取成功!用时:" << use_time << " s" << endl;
system("pause");
return 0;
}


运行结果:

 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
比较sizeof()与strlen()
178 f0602
C 内存管理详解
【C++】用C++编写最简单的计算器简单完整版
常用矩阵计算C语言代码
编程论坛-平衡二叉树[原创]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服