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

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

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

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

代码如下:

#include <iostream>
#include <fstream>
#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-Alivestruct 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

喜欢的欢迎关注我的公众号

c\c++写网络爬虫,curl+gumbo配合使用相关推荐

  1. 网页爬虫python代码_《用python写网络爬虫》完整版+源码

    原标题:<用python写网络爬虫>完整版+源码 <用python写网络爬虫>完整版+附书源码 本书讲解了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介,从页面中 ...

  2. 《用Python写网络爬虫》——1.5 本章小结

    本节书摘来自异步社区<用Python写网络爬虫>一书中的第1章,第1.5节,作者 [澳]Richard Lawson(理查德 劳森),李斌 译,更多章节内容可以访问云栖社区"异步 ...

  3. 用Python写网络爬虫pdf

    下载地址:网盘下载 作为一种便捷地收集网上信息并从中抽取出可用信息的方式,网络爬虫技术变得越来越有用.使用Python这样的简单编程语言,你可以使用少量编程技能就可以爬取复杂的网站. <用Pyt ...

  4. 用python写网络爬虫 第2版 pd_用Python写网络爬虫(第2版)

    用Python写网络爬虫(第2版)电子书 畅销的Python网络爬虫发实战图书全新升级版,上一版年销量近40000册. 针对Python 3.6版本编写. 提供示例完整源码和实例网站搭建源码,确保用户 ...

  5. 网络爬虫python的特点有哪些_为什么写网络爬虫天然就是择Python而用

    关于这个问题,老猿就先从自己的经历讲起吧.很多年前,大约11年前,老猿我接手了一个搜索引擎的网络爬虫,那是一个用C++写的通用搜索引擎的爬虫.C++的语言,多线程的实现,爬虫的运行效率非常高.但是,找 ...

  6. python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论

    新浪微博需要登录才能爬取,这里使用m.weibo.cn这个移动端网站即可实现简化操作,用这个访问可以直接得到的微博id. 分析新浪微博的评论获取方式得知,其采用动态加载.所以使用json模块解析jso ...

  7. 《用Python写网络爬虫第2版》PDF中英文+代码分析

    互联网包含了迄今为止最有用的数据集,并且大部分可以免费公开访问.但是,这些数据难以复用.它们被嵌入在网站的结构和样式当中,需要抽取出来才能使用.从网页中抽取数据的过程又称为网络爬虫,随着越来越多的信息 ...

  8. 用Python写网络爬虫:推荐这本书看看。

    <用Python写网络爬虫>讲解了如何使用Python来编写网络爬虫程序,内容包括网络爬虫简介,从页面中抓取数据的三种方法,提取缓存中的数据,使用多个线程和进程来进行并发抓取,如何抓取动态 ...

  9. python网络爬虫网易云音乐_手把手教你写网络爬虫(1):网易云音乐歌单

    大家好,<手把手教你写网络爬虫>连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意.本文由浅入深的把爬虫技术和盘托出,为初学者提供一种轻 ...

  10. python爬虫教程:Python写网络爬虫的优势和理由

    在本篇文章里小编给各位整理了一篇关于选择Python写网络爬虫的优势和理由以及相关代码实例,有兴趣的朋友们阅读下吧. 什么是网络爬虫? 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页 ...

最新文章

  1. ndk 路径修改 超简单的方法
  2. 单击“登录”后,用户名和密码显示在地址栏中,不安全
  3. Direct交换器-编写消费者
  4. String的常用方法(java)
  5. Tips--Multisim中压电传感器与电荷源的替代方案
  6. php 2个时间查询差几天,PHP怎么计算2个日期差
  7. 来自一个从事单片机工作中遇到的真人真事,单片机从业者可以借鉴
  8. 【原创】Nginx+PHP-FPM优化技巧总结
  9. idea 配置maven插件
  10. oracle按月统计按季度统计,Oracle数据库按月统计(候,旬,月,季,年)
  11. iOS Extension调试 无法在Xcode上进行调试
  12. Wav2KWS: Transfer Learning From Speech Representations for Keyword Spotting(2021)
  13. 查询同名同性学生名单,并统计同名人数
  14. 1-甲基-3-丁基咪唑四卤化铁([C4mim]FeX4,X=Cl,Br)磁性离子液体
  15. JS中.foucus()方法给入力框赋上焦点后,将焦点移动到入力值后面
  16. C++之 system(“pause“); 与 getchar(); 防止控制台闪退
  17. 网络上游戏制作相关学习站点的网址
  18. Dusk network 生态图
  19. Java == equals() hashCoed()的区别
  20. Could not find action or result No result defined for action

热门文章

  1. Android6 喜刷刷
  2. idea 配置 热部署 详细教程
  3. 联发科技发布8K智能电视芯片 终端于2020年初对外供货
  4. 什么是回调地狱?以及如何解决回调地狱
  5. matlab实现同类物体简单计数
  6. 双浮球水位开关的原理
  7. 阚总工作第二天,写于清晨
  8. 计算机的优势和劣势_马上就要计算机二级考试了,它的含金量你还不知道?
  9. chromeos-apk —— Chrome 上运行安卓应用
  10. 奇异值分解(SVD)原理及详解