标 题: C++ 提取网页内容系列
作 者: itdef
链 接: http://www.cnblogs.com/itdef/p/4171179.html

欢迎转帖 请保持文本完整并注明出处

首先分析网页就要下载网页内容 这里给出了两种方案

一种是使用MFC自带函数

代码如下:

int GetHttpFileData(CString strUrl,char* szDownloadHtmFileName)
{
CInternetSession Session("Internet Explorer", 0);
CHttpFile *pHttpFile = NULL;
CString strData;
CString strClip;
int iRet = -1; if(szDownloadHtmFileName == NULL)
{
cerr << "DownloadHtmFileName is NULL" << endl;
Session.Close();
return iRet;
} ofstream of(szDownloadHtmFileName);
if (of.bad())
{
cerr << "of create file error" << endl;
Session.Close();
return iRet;
} try
{
pHttpFile = (CHttpFile*)Session.OpenURL(strUrl);
while ( pHttpFile->ReadString(strClip) )
{
of << strClip;
}
}catch(CInternetException* pEx)
{
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
cerr << __FUNCTION__ << pszError << endl;
goto GetHttpFileData_EXIT;
} iRet = 0; GetHttpFileData_EXIT:
Session.Close();
of.close(); return iRet;
}

这里我将下载内容写入了一个文件存入硬盘。另外还需要注意的是 网页文件下载的格式可能是宽字节 使用UTF8格式,这里需要将其转换为GBK多字节。

int UTF8Str2GBK(const string& strUTF8,string& strGBK)
{
int i = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
WCHAR *wsz = NULL;
TCHAR *tsz = NULL;
int iRet = -1; wsz = new WCHAR[i+1];
if( NULL == wsz)
{
goto UTF8Str2GBK_EXIT;
}
MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, wsz, i); i = WideCharToMultiByte(CP_ACP, 0, wsz, -1, NULL, 0, NULL, NULL);
tsz = new TCHAR[i+1];
if( NULL == tsz)
{
goto UTF8Str2GBK_EXIT;
}
WideCharToMultiByte(CP_ACP, 0, wsz, -1, tsz, i, NULL, NULL); strGBK = string(tsz); iRet = 0;
UTF8Str2GBK_EXIT: delete []wsz;
delete []tsz; return iRet;
}

全部代码见 http://www.oschina.net/code/snippet_614253_43732

效果图见 http://www.cnblogs.com/itdef/p/4081963.html

C++ 提取网页内容系列之一的更多相关文章

  1. C++ 提取网页内容系列之四正则

    标 题: C++ 提取网页内容系列之四作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4173833.html 欢迎转帖 请保持文本完整并注明出处 将网页内 ...

  2. C++ 提取网页内容系列之三

    标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171659.html 欢迎转帖 请保持文本完整并注明出处 这次继续下载 ...

  3. C++ 提取网页内容系列之二

    标 题: C++ 提取网页内容系列作 者: itdef链 接: http://www.cnblogs.com/itdef/p/4171203.html 欢迎转帖 请保持文本完整并注明出处 另外一种下载 ...

  4. C++ 提取网页内容系列之五 整合爬取豆瓣读书

    工作太忙 没有时间细化了 就说说 主要内容吧 下载和分析漫画是分开的 下载豆瓣漫画页面是使用之前的文章的代码 见http://www.cnblogs.com/itdef/p/4171179.html ...

  5. 在.NET中使用JQuery 选择器精确提取网页内容

    1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...

  6. Python爬虫十六式 - 第四式: 使用Xpath提取网页内容

    Xpath:简单易用的网页内容提取工具 学习一时爽,一直学习一直爽 !   Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 requests 的使用方法.到上节课为止, ...

  7. Httpclient 和jsoup结和提取网页内容(某客学院视频链接)

    最近在极客学院获得体验会员3个月,然后就去上面看了看,感觉课程讲的还不错.整好最近学习Android,然后去上面找点视频看看.发现只有使用RMB买的会员才能在上面下载视频.抱着试一试的态度,去看他的网 ...

  8. Python使用xslt提取网页数据

    1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第一部分,实验 ...

  9. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

随机推荐

  1. 对中断interrupt的理解

    一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...

  2. IIS6.0+win2003部署MVC网站的一些问题

    安装iis,framework环境不谈.MVC网站部署 步骤: 1.为程序新建一个应用程序池(将default的那个程序池作为模板就可以了) 2.web服务扩展一些启用一些必要的服务 3.新建网站 描 ...

  3. LDAP认证模式简介

    今天发现公共服务中有ldap数据库服务,先大概了解一下ldap,转载下面的文章.原文链接:https://www.jianshu.com/p/d3f8c8f5d661 另外记录一篇文章地址:https ...

  4. keil5 MDK 链接报错 Error: L6410W 解决

    keil5 MDK 报错 Build target 'Project' linking... .\Output\Project.axf: Warning: L6310W: Unable to find ...

  5. Vue中table合并单元格用法

    <table> <tr> <th>地名</th> <th>结果</th> <th>人名</th> < ...

  6. [Oracle,2018-03-02] oracle一次插入多条记录

    insert into student(name,age) ' from dual union all ' from dual union all ' from dual 在oracle中不能像mys ...

  7. JS截取URL地址参数

    var url = window.location.search; 截取?r= 后面的参数var url = window.location.href;var urlss= urlssplit('co ...

  8. Python函数学习

    def func(x, y): print(x) print(y) func(x=1,2) #报错,关键参数一定不能放在位置参数前面 func(1,y=2) #可以正常运行 #参数组,适用于实参个数不 ...

  9. ajax单删

    通过点击事件获取相应数据的id,将id传到的控制器,根据id执行删除的sql语句,执行官删除:同时ajax的有点就是快捷方便,无刷新,增强用户的体验. <?php namespace app\i ...

  10. Linux命令:cd

    语法 cd [-L|[-P [-e]]] [dir]改变shell当前工作目录.仅对执行命令所在的shell有效. 参数 -L  按符号链接进入目录. -P   按物理链接进入目录 -e    如果指 ...