当前位置: 首页 > news >正文

Restclient-cpp库介绍和实际应用:爬取www.sohu.com

亿牛云代理.jpg

概述

Restclient-cpp是一个用C++编写的简单而优雅的RESTful客户端库,它可以方便地发送HTTP请求和处理响应。它基于libcurl和jsoncpp,支持GET, POST, PUT, PATCH, DELETE, HEAD等方法,以及自定义HTTP头部,超时设置,代理服务器等功能。

本文将介绍如何使用Restclient-cpp库来实现一个简单的爬虫程序,爬取www.sohu.com网站的内容,并将其保存为本地文件。为了避免被目标网站屏蔽或限制访问,我们还将使用亿牛云爬虫代理来提供高效稳定的代理IP服务。

正文

安装Restclient-cpp库

要使用Restclient-cpp库,首先需要安装它的依赖库libcurl和jsoncpp。在Ubuntu系统中,可以使用以下命令安装:

sudo apt-get install libcurl4-openssl-dev libjsoncpp-dev

然后,可以从GitHub上克隆Restclient-cpp库的源码,并编译安装:

git clone https://github.com/mrtazz/restclient-cpp.git
cd restclient-cpp
./autogen.sh
./configure
make install

编写爬虫程序

接下来,我们可以编写一个简单的C++程序,使用Restclient-cpp库来发送HTTP请求,并处理响应。我们需要包含以下头文件:

#include <iostream>
#include <fstream>
#include <restclient-cpp/restclient.h>
#include <restclient-cpp/connection.h>

然后,我们可以创建一个RestClient::Connection对象,并设置一些选项,如超时时间,用户代理,代理服务器等。我们使用亿牛云爬虫代理提供的域名、端口、用户名、密码来设置代理服务器。注意,这里的用户名和密码需要替换为自己的账号信息。

// 创建一个连接对象
RestClient::Connection* conn = new RestClient::Connection("http://www.sohu.com");
// 设置超时时间为10秒
conn->SetTimeout(10);
// 设置用户代理为Chrome浏览器
conn->SetUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36");
// 亿牛云 爬虫加强版 设置代理服务器的域名和端口
conn->SetProxy("http://www.16yun.cn:9010");
// 亿牛云 爬虫加强版 设置代理服务器的用户名和密码(需要替换为自己的账号信息)
conn->SetProxyAuth("16YUN:16IP");

接着,我们可以使用连接对象的get方法来发送GET请求,并获取响应对象。响应对象包含了响应码、响应头部、响应体等信息。

// 发送GET请求,并获取响应对象
RestClient::Response r = conn->get("/");
// 打印响应码
std::cout << "Response code: " << r.code << std::endl;
// 打印响应头部
std::cout << "Response headers: " << r.headers.to_string() << std::endl;

最后,我们可以将响应体的内容保存为本地文件,以便后续分析或处理。

// 将响应体保存为本地文件
std::ofstream outfile("sohu.html");
outfile << r.body;
outfile.close();

编译和运行爬虫程序

为了编译和运行爬虫程序,我们需要链接Restclient-cpp库和libcurl库。在Ubuntu系统中,可以使用以下命令编译:

g++ spider.cpp -o spider -lrestclient-cpp -lcurl

然后,可以运行爬虫程序,并查看输出和本地文件:

./spider
Response code: 200
Response headers: Date: Wed, 11 Oct 2023 06:17:00 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Server: nginx
Cache-Control: max-age=60
Expires: Wed, 11 Oct 2023 06:18:00 GMT
Content-Encoding: gzipcat sohu.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>搜狐首页</title>
...
</head>
<body>
...
</body>
</html>

结语

本文介绍了如何使用Restclient-cpp库来实现一个简单的爬虫程序,爬取www.sohu.com网站的内容,并将其保存为本地文件。我们还使用了亿牛云爬虫代理来提供高效稳定的代理IP服务,避免了被目标网站屏蔽或限制访问的风险。Restclient-cpp库是一个简单而优雅的RESTful客户端库,它可以方便地发送HTTP请求和处理响应,适合用于各种爬虫项目。

相关文章:

Restclient-cpp库介绍和实际应用:爬取www.sohu.com

概述 Restclient-cpp是一个用C编写的简单而优雅的RESTful客户端库&#xff0c;它可以方便地发送HTTP请求和处理响应。它基于libcurl和jsoncpp&#xff0c;支持GET, POST, PUT, PATCH, DELETE, HEAD等方法&#xff0c;以及自定义HTTP头部&#xff0c;超时设置&#xff0c;代理服…...

提升市场调研和竞品分析效率:利用Appium实现App数据爬取

市场调研和竞品分析通常需要获取大量的数据&#xff0c;而手动收集这些数据往往耗时且容易出错。而利用Appium框架&#xff0c;我们可以轻松地实现自动化的App数据爬取&#xff0c;这种方法不仅可以节省时间和人力成本&#xff0c;还可以提高数据的准确性和一致性。 Appium是一…...

【Git笔记】之Git重命名详解

目录 一、Git重命名文件 二、Git重命名origin 三、Git重命名分支 四、Git重命名远程分支 五、Git重命名作者 六、Git clone重命名 七、Git重命名仓库 八、Git重命名文件夹后出现两个代码 九、Git重命名文件名 Git是一个非常流行的版本控制工具&#xff0c;它可以帮助程…...

201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

目录 ★ 工作队列介绍代码演示测试注意点1&#xff1a;注意点2&#xff1a; ★ 工作队列介绍 工作队列&#xff1a; 就是让多个消费者竞争消费同一个消息队列的消息&#xff0c;相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…...

了解三层架构:表示层、业务逻辑层、数据访问层

目录 背景&#xff1a; 三层架构 什么是三层: 分层的目的&#xff1a; 三层的结构关系​编辑 三层表现形式:​编辑 三层的优缺点&#xff1a; 总结: 背景&#xff1a; 三层架构是一种软件设计模式&#xff0c;可称为客户端-服务器-架构&#xff0c;把各个功能模块划分…...

三相空气开关

一、三相空开的作用 三相空气开关对任意一相出现过载或短路&#xff0c;均起到保护作用。 二、三相空气开关原理图&#xff1a; 1、老式空气开关 1)、短路时&#xff0c;电磁脱钩器工作 2)、过载时&#xff0c;发热元件引起双金属片弯曲&#xff0c;使脱钩器工作 3)、测试按…...

uniapp 单位rpx ,设计稿尺寸px处理方式

1.使用postcss-px2rpx 插件做全局的单位转换 npm install postcss-px2rpx -D npm 安装 2.postcss.config.js修改 module.exports {plugins: {postcss-px2rpx: {// 设计稿宽度&#xff0c;默认750designWidth: 750,// 需要转换的最小像素值&#xff0c;默认1pxminPixelValue: 1…...

@所有燃气企业,城燃企业数字化转型重点抓住的八个关键点

关键词&#xff1a;智慧燃气、燃气数字化、设备设施数字化 数字化转型是用信息技术全面重塑企业经营管理模式&#xff0c;是企业发展模式的变革创新&#xff0c;是企业从工业经济时代迈向数字经济时代的必然选择。加快推进企业数字化转型&#xff0c;打造数字时代企业业务运行…...

大数据学习(4)-hive表操作

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…...

第二证券:汇金增持有望催化银行板块 白酒企稳信号凸显

昨日&#xff0c;两市股指盘中震动上扬&#xff0c;创业板指、科创50指数一度涨超1%&#xff0c;但沪指午后涨幅逐渐回落。到收盘&#xff0c;沪指涨0.12%报3078.96点&#xff0c;深成指涨0.35%报10084.89点&#xff0c;创业板指涨0.8%报2003.9点&#xff0c;科创50指数涨1.29%…...

Kubernetes使用OkHttp客户端进行网络负载均衡

在一次内部Java服务审计中&#xff0c;我们发现一些请求没有在Kubernetes&#xff08;K8s&#xff09;网络上正确地实现负载均衡。导致我们深入研究的问题是HTTP 5xx错误率的急剧上升&#xff0c;由于CPU使用率非常高&#xff0c;垃圾收集事件的数量很多以及超时&#xff0c;但…...

oracle设置自增ID

CREATE SEQUENCE 序列名 START WITH 1 INCREMENT BY 1 MINVALUE 1 ORDER NOCYCLE; //CREATE SEQUENCE “QMS”.“Untitled” MINVALUE 1 INCREMENT BY 1 START WITH 1 ORDER NOCACHE 创建触发器&#xff1a; create or replace trigger 触发器名 before insert on “表名” fo…...

ubuntu22.04设置中文

安装了中文语言包。 sudo apt-get install language-pack-zh-hans将系统的默认语言设置为中文 sudo update-locale LANGzh_CN.UTF-8添加环境 /etc/profile 最后中添加 export LANGzh_CN.utf8 export LC_CTYPE"zh_CN.utf8"可以在~/.bashrc文件后面也加上...

Java中 创建不可变集合

常规写法 以往我们创建一些不可变集合的时候&#xff0c;通常是这样写的&#xff1a; // 不可变的Set Set<String> set new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set Collections.unmodifiableSet(set); //…...

options.css 内容优化2 --chatPGT

问&#xff1a; options.css 内容优化,功能列表的li,设置成点击按钮的样式&#xff0c;需要有鼠标经过高亮&#xff0c;选中时按钮背景颜色和未选中时的背景色需要有肉眼可见的色差 gpt: 为了使左侧功能列表的每个 <li> 元素看起来像按钮&#xff0c;并且在鼠标经过时…...

MS4344:24bit、192kHz 双通道数模转换电路

MS4344 是一款立体声数模转换芯片&#xff0c;内含插值滤波器、 multi-bit 数模转换器、输出模拟滤波器。 MS4344 支持大部分 的音频数据格式。 MS4344 基于一个带线性模拟低通滤波器的 四阶 multi-bit Δ-Σ 调制器&#xff0c;而且本芯片可以通过检测信号频率 和主时钟频…...

Talk | ACL‘23 杰出论文,MultiIntruct:通过多模态指令集微调提升VLM的零样本学习

本期为TechBeat人工智能社区第536期线上Talk&#xff01; 北京时间10月11日(周三)20:00&#xff0c;弗吉尼亚理工大学博士生—徐智阳、沈莹的Talk已准时在TechBeat人工智能社区开播&#xff01; 他们与大家分享的主题是: “通过多模态指令集微调提升VLM的零样本学习”&#xff…...

PLC编程速成(二)

目录 操作符 什么是操作符&#xff1f; 变量表&#xff08;数据类型&#xff09; 常用的类型&#xff1a; 变量表图 设置复位指令 如何重复双线圈与解决复双线圈问题&#xff1f; 解决复双线圈 ​编辑 重复双线圈 置复位指令&#xff08;有置位就存在复位&#xff09;…...

【萌新向】Sql Server保姆级安装教程-图文详解手把手教你安sql

首先打开百度&#xff0c;搜索sql server&#xff0c;找到图示词条&#xff0c;点击进去。 一般版本是需要付费的&#xff0c;正常开发可以使用免费版本【Express】&#xff0c;点击下载 下载完成后打开下载的文件。三个选项&#xff0c;我们选自定义方式。 选择语言和位置…...

LLVM(5)ORC实例分析

ORC实例总结 总结 因为API茫茫多&#xff0c;逻辑上的一些概念需要搞清&#xff0c;编码时会容易很多。JIT的运行实体使用LLVMOrcCreateLLJIT可以创建出来&#xff0c;逻辑上的JIT实例。JIT实例需要加入运行库&#xff08;依赖库&#xff09;和用户定义的context&#xff08;…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...