c++ curl 超时_cc++写网络爬虫,curl+gumbo配合使用

是的,你没有听错。就是用c++或者说c语言写爬虫。

其实不难,虽然没有Python写起来那么简单。但是也不是那么复杂啦,毕竟好多大佬都写了那么多库,我们只要会用大佬写的库就行。

网址:https://acm.sjtu.edu.cn/OnlineJudge/status

21b027afcc39bcbee4e09b9484675023.png

我们就爬取这个页面的评审状态的所有内容。

cb9d8b578f52acd6a237ed8b3a732d1c.png

代码如下:

iostreamfstream c.nodeNum(); i++)\n\t{\n\t\tfor (int j = 0; j > c.nodeAt(i).childNum(); j++)\n\t\t{\n\t\t\tCNode nd = c.nodeAt(i).childAt(j);\n\t\t\tcout >> MyStringFormat::UTF_82ASCII(nd.text()).c_str() >> \"  \";\n\t\t}\n\t\tcout >> endl;\n\t}\n}\n\nstatic size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid)\n{\n\tstring* str = dynamic_cast>string*
#include #include #include "gumbo/Document.h"#include "gumbo/Node.h"#include "MyStringFormat.h"#include "curl/curl.h"using namespace std;#define  URL_REFERER "https://acm.sjtu.edu.cn/OnlineJudge/"void printFunc(string page){  CDocument doc;  doc.parse(page.c_str());  CSelection c = doc.find("#status tr");  for (int i = 0; i < c.nodeNum(); i++)  {    for (int j = 0; j < c.nodeAt(i).childNum(); j++)    {      CNode nd = c.nodeAt(i).childAt(j);      cout << MyStringFormat::UTF_82ASCII(nd.text()).c_str() << "  ";    }    cout << endl;  }}static size_t OnWriteData(void* buffer, size_t size, size_t nmemb, void* lpVoid){  string* str = dynamic_cast<string*>((string *)lpVoid);  if (NULL == str || NULL == buffer)  {    return -1;  }  char* pData = (char*)buffer;  str->append(pData, size * nmemb);  return nmemb;}bool HttpRequest(const char* url,  string& strResponse,  bool get/* = true*/,  const char* headers/* = NULL*/,  const char* postdata/* = NULL*/,  bool bReserveHeaders/* = false*/,  int timeout/* = 10*/){  CURLcode res;  CURL* curl = curl_easy_init();  if (NULL == curl)  {    return false;  }  curl_easy_setopt(curl, CURLOPT_URL, url);  //响应结果中保留头部信息  if (bReserveHeaders)    curl_easy_setopt(curl, CURLOPT_HEADER, 1);  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");  curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);  curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);  curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);  //设定为不验证证书和HOST  //curl_easy_setopt(curl, CURLOPT_PROXY, "127.0.0.1:8888");//设置代理  //curl_easy_setopt(curl, CURLOPT_PROXYPORT, 9999); //代理服务器端口  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);  //设置超时时间  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout);  curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);  curl_easy_setopt(curl, CURLOPT_REFERER, URL_REFERER);  curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");  //不设置接收的编码格式或者设置为空,libcurl会自动解压压缩的格式,如gzip  //curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "gzip, deflate, br");  //设置hostConnection: Keep-Alive  struct curl_slist *chunk = NULL;  chunk = curl_slist_append(chunk, "Host: acm.sjtu.edu.cn");  chunk = curl_slist_append(chunk, "Connection: Keep-Alive");  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);  //添加自定义头信息  if (headers != NULL)  {    chunk = curl_slist_append(chunk, headers);    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);  }  if (!get && postdata != NULL)  {    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);  }  res = curl_easy_perform(curl);  bool bError = false;  if (res == CURLE_OK)  {    int code;    res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code);    if (code != 200 && code != 302)    {      bError = true;    }  }  else  {    bError = true;  }  curl_easy_cleanup(curl);  return !bError;}int main(int argc, char * argv[]){  string response;  HttpRequest("https://acm.sjtu.edu.cn/OnlineJudge/status", response, true, NULL, NULL, false, 10);  printFunc(response);  system("pause");  return 0;}

我知道,我贴出这些代码,也没法运行,所以我把工程文件也发出来。为了不被大家说我骗积分,我的所有东西都贴出百度云链接。

链接:https://pan.baidu.com/s/1jBZ-6tT-4ne0uTMw4jFvKA 
提取码:pmg6 

喜欢的欢迎关注我的公众号,欢迎关注我的csdn:wu_lian_nan

b6ed37ec9ca3c59f7792d244b20874d6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S如何边缘控制_强夯法效果如何?来看看这个检测结果

强夯法指的是为提高软弱地基的承载力&#xff0c;用重锤自一定高度下落夯击土层使地基迅速固结的方法。强夯法适用于处理碎石土、砂土、低饱和度的粉土与黏性土、湿陷性黄土、杂填土和素填土等地基。对高饱和度的粉土与黏性土等地基&#xff0c;当采用在夯坑内回填块石、碎石或…

metinfo mysql_Metinfo 5.3.17 前台SQL注入漏洞

Metinfo 8月1日升级了版本&#xff0c;修复了一个影响小于等于5.3.17版本(几乎可以追溯到所有5.x版本)的SQL注入漏洞。这个SQL注入漏洞不受软WAF影响&#xff0c;可以直接获取数据&#xff0c;影响较广。### 0x01. 漏洞原理分析漏洞出现在 /include/global.func.php 文件的 jum…

冒泡和快速排序的时间复杂度_三分钟快速记住冒泡排序算法

冒泡排序名字由来&#xff1a;是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列)&#xff0c;就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样&#xff0c;故名“冒泡排序”。冒泡排序原理&#xff1a;①、比较相邻的元素。如果第一个比第二个大&#xf…

js二维数组arr中表示读取第i行第j列的是:_c++ c语言 数组与字符串

c语法7 - 数组与字符串概述定义&#xff1a;把具有相同类型的若干变量按有序形式组织起来称为数组。C语言数组属于构造数据类型。一个数组可以分解为多个数组元素&#xff0c;这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同&#xff0c;数组又可分为数…

eprime经典程序案例_小程序经典案例!写字楼里的小店铺如何利用小程序增加人流量!...

大家好&#xff0c;我是柳州木子科技&#xff0c;当前短视频营销如火如荼&#xff0c;相比之下小程序不温不火&#xff0c;我还是那句话&#xff0c;是因为小程序没有把成功案例挖掘出来&#xff0c;通过小程序卖货赚钱的大有人在。前几篇分享了小程序玩赚的文章案例&#xff0…

怎么看电脑配置高不高_电脑店学徒写的电脑配置单处处都是“亮点”,能“气死”师傅...

无论选择哪种类型的电脑都要把重点放在电脑硬件配置上面&#xff0c;电脑的性能完全依靠硬件配置的组合情况&#xff0c;电脑的价格高低标准依据同样是看电脑硬件配置组合情况&#xff0c;对于组装电脑来说&#xff0c;那硬件组合情况就格外重要了&#xff0c;因为组装电脑的硬…

hao123电脑版主页_百度浏览器停更没关系,hao123才令人唏嘘!

月初&#xff0c;百度浏览器官网发布公告&#xff0c;“由于部门业务调整&#xff0c;官方将于2019年4月30日对产品部分功能停止服务。相关的产品包括桌面百度、百度工具栏、百度地址栏、百度极速浏览器、hao123浏览器&#xff0c;产品将不再更新&#xff0c;基本功能本地仍可使…

笔记本电脑摄像头不能用_电脑没有摄像头怎么办

现在大多数家庭电脑都没有配备摄像头&#xff0c;或者大多数普通笔记本电脑的摄像头又非常模糊&#xff0c;如果突然要用摄像头的话又不能马上买。但是手机上的摄像头又那么清楚&#xff0c;有没有办法把手机上的摄像头装到电脑上面呢&#xff1f;今天我要推荐的一款软件是Droi…

excel取消隐藏_猴哥讲述:对excel工作表进行隐藏和取消隐藏的操作行为

有的时候因为工作需要&#xff0c;我们会在一个工作簿中创建插入多个excel工作表&#xff0c;如果工作表越来越多&#xff0c;我们在选择操作工作表的时候很不方便&#xff0c;我们这时候就可以对excel工作表进行隐藏&#xff0c;excel工作表隐藏和取消隐藏的操作方法如下&…

mysql大量数据合并_mysql中将多行数据合并成一行数据

一个字段可能对应多条数据&#xff0c;用mysql实现将多行数据合并成一行数据例如&#xff1a;一个活动id(activeId)对应多个模块名(modelName),按照一般的sql语句&#xff1a;1 SELECT am.activeId,m.modelName2 FROM activemodel am3 JOIN model m4 ON am.modelId m.modelId5…

不同图像锐化算子提取的图像信息有哪些不同_传统图像处理

传统图像处理一、边缘检测算子①Sobel算子该算子中引入了类似局部平均的运算&#xff0c;因此对噪声具有平滑作用&#xff0c;能很好的消除噪声的影响。与Prewitt算子相比&#xff0c;Sobel算子对于像素的位置的影响做了加权&#xff0c;可以降低边缘模糊程度&#xff0c;因此效…

文本聚类分析算法_聚类分析算法综述

前 言聚类是人类认识未知世界的一种重要的认知手段。在生产和生活中,人们往往面对非常复杂的事和物,如果能够把相似的东西归为一类,有明显区别的事物分属在不同的类别中,处理起来就大为简便。所谓“物以类聚,人以群分”,说的就是这个道理。譬如人们将生物分为动物和植物,又根据…

按照标题排序mysql_Oracle EBS Form中实现点击列标题进行排序

在做EBS表单开发时&#xff0c;虽然使用folder功能提供了排序功能&#xff0c;对多行数据块可以对前三列进行指定排序&#xff0c;也可以单击前三列的列标题进行排27.1 问题描述在做EBS表单开发时&#xff0c;虽然使用folder功能提供了排序功能&#xff0c;对多行数据块可以对前…

vscode导入本地jar包_go导入本地包踩坑(已解决!)

当我想要仿照C语言的大程序结构&#xff0c;来写go语言的程序&#xff0c;出现下面的报错&#xff08;ps&#xff1a;系统是windows&#xff0c;文本编辑器&#xff08;或称IDE&#xff09;是vscode&#xff09;然后vscode还会时不时地在右下角出现这样地提示信息对于go语言新手…

java super用法_Java基础面试题汇总

blog.csdn.net/ThinkWon/article/details/104390612Java概述何为编程编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码&#xff0c;并最终得到结果的过程。为了使计算机能够理解人的意图&#xff0c;人类就必须要将需解决的问题的思路、方法、和手段通过计算…

java string返回_Java的String字符串内容总结

String--字符串获取字符串的长度使用Sring类的length()方法可获取字符串对象的长度&#xff0c;例&#xff1a;str.length();str代表指定的字符串对象;返回值为返回指定字符串的长度。例&#xff1a;获取字符串中指定字符的索引位置String类提供了indexOf()和lastIndexOf()方法…

汉诺塔java程序_Java编写一个汉诺塔的过程

[java]代码库/** 需求&#xff1a;用Java编写一个汉诺塔的过程* 汉若塔问题&#xff0c;就是把A柱子上面从大到小一次叠放的盘子借助B柱移到C柱上去&#xff0c;规则是一次只能移动一个盘子&#xff0c;大盘子不能放到小盘子之上** 思想&#xff1a;采用递归的方法来接* 1. 先将…

ajax 同步_第3部分-0:同步和异步,还有回调需要了解一下

同步是什么异步是什么 异步场景&#xff1a; &#xff08;1&#xff09;定时任务 &#xff08;2&#xff09;网络请求&#xff1a;Ajax 、图片加载 全面分析前端的网络请求方式 &#xff08;3&#xff09;事件绑定 异步产生知识点&#xff1a; 进程和线程 单线程 记一次 Vue 移…

音频重采样有什么用_最佳音频接口基本购买指南

音频接口是计算机实现录音功能的媒介设备&#xff0c;用于将乐器和麦克风发出的声音转换为数字信息&#xff0c;以便计算机可以理解并存储在硬盘上。在播放音频时&#xff0c;接口将数字音频文件重新转换为模拟信号&#xff0c;然后用监听音箱或耳机播放出来。简而言之&#xf…

java 正则 最后一个字符_正则表达式怎么匹配字符串中最后一串数字?

展开全部importretempDwellTime:666mre.search(r\d*,temp)printrepr(m.group()),m.start(),m.end()mre.search(r\d,temp)printrepr(m.group()),m.start(),m.end()printre.findall(r\d*,temp)输出&#xff1a;006661114[,,,,,,,,,,,666,]扩展资料正则表达式&#xff0c;校验数字…