C++编写的多线程自动爬虫程序

以下是一个使用C++编写的爬虫程序,用于爬取Python进行多线程跑数据的内容。本示例使用了Python的requests库来发送HTTP请求,并使用cheeseboy的爬虫ipIP库来设置爬虫ip信息。以下是详细代码和步骤:

在这里插入图片描述

#include <iostream>
#include <string>
#include <thread>
#include <curl/curl.h>#include "cheeseboy.h"using namespace std;// 爬取函数
void spider() {// 设置爬虫ip信息char *proxy_host = "www.duoip.cn";int proxy_port = 8000;struct curl_slist *proxy_list = NULL;proxy_list = curl_slist_append(proxy_list, "http://" + proxy_host + ":" + to_string(proxy_port));// 创建CURL对象CURL *curl = curl_easy_init();if(curl) {// 设置爬虫ip信息curl_easy_setopt(curl, CURLOPT_PROXY, proxy_list);curl_easy_setopt(curl, CURLOPT_URL, "http://python-thread-pool.com/");// 发送请求curl_easy_perform(curl);// 处理返回信息string response = curl_easy_getinfo(curl, CURLINFO_BODY_CONTENT, NULL);cout << "Response: " << response << endl;// 关闭CURL对象curl_easy_cleanup(curl);}
}int main() {// 创建线程thread spider_thread(spider);// 等待线程完成spider_thread.join();return 0;
}

以下是每行代码的解释:

1、#include <iostream>:包含iostream库,用于输入输出。

2、#include <string>:包含string库,用于字符串处理。

3、#include <thread>:包含thread库,用于线程编程。

4、#include <curl/curl.h>:包含curl库,用于发送HTTP请求。

5、using namespace std;:使用标准命名空间。

6、void spider() { ..、}:定义一个名为spider的函数,该函数负责爬取数据。

7、char *proxy_host = "www.duoip.cn";:定义一个名为proxy_host的字符指针,用于存储爬虫ipIP的地址。

8、int proxy_port = 8000;:定义一个名为proxy_port的整型变量,用于存储爬虫ipIP的端口号。

9、struct curl_slist *proxy_list = NULL;:定义一个名为proxy_list的CURL_slist结构体指针,用于存储爬虫ip信息。

10、proxy_list = curl_slist_append(proxy_list, "http://" + proxy_host + ":" + to_string(proxy_port));:将爬虫ip信息添加到proxy_list中。

11、CURL *curl = curl_easy_init();:创建一个名为curl的CURL对象。

12、if(curl) { ..、}:如果curl对象创建成功,执行以下代码。

13、curl_easy_setopt(curl, CURLOPT_PROXY, proxy_list);:设置爬虫ip信息。

14、curl_easy_setopt(curl, CURLOPT_URL, "http://python-thread-pool.com/");:设置要爬取的网站的URL。

15、curl_easy_perform(curl);:发送HTTP请求。

16、string response = curl_easy_getinfo(curl, CURLINFO_BODY_CONTENT, NULL);:获取服务器返回的数据。

17、cout << "Response: " << response << endl;:输出服务器返回的数据。

18、curl_easy_cleanup(curl);:关闭CURL对象。

19、int main() { ..、}:定义一个名为main的函数,该函数用于创建线程并等待其完成。

20、thread spider_thread(spider);:创建一个名为spider_thread的线程,该线程执行spider函数。

21、spider_thread.join();:等待spider_thread线程完成。

22、return 0;:返回0表示程序成功执行。

以上就是一个使用C++编写的爬虫程序,用于爬取Python进行多线程跑数据的内容。注意,使用爬虫ipIP爬取数据可能违反某些网站的使用协议,使用时请确保遵守相关法律法规和网站使用协议。

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

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

相关文章

StyleGAN:彻底改变生成对抗网络的艺术

一、介绍 多年来&#xff0c;人工智能领域取得了显着的进步&#xff0c;其中最令人兴奋的领域之一是生成模型的发展。这些模型旨在生成与人类创作没有区别的内容&#xff0c;例如图像和文本。其中&#xff0c;StyleGAN&#xff08;即风格生成对抗网络&#xff09;因其创建高度逼…

12-使用vue2实现todolist待办事项

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

C语言实现杨辉三角

杨辉三角是一个经典的数学图形&#xff0c;可以用C语言来实现&#xff0c;实现代码如下&#xff1a; #include <stdio.h>int main() {int i, j, n;int a[10][10];printf("请输入要打印的行数: ");scanf("%d", &n);// 初始化第一行和对角线for (…

【Spring Boot】035-Spring Boot 整合 MyBatis Plus

【Spring Boot】035-Spring Boot 整合 MyBatis Plus 【Spring Boot】010-Spring Boot整合Mybatis https://blog.csdn.net/qq_29689343/article/details/108621835 文章目录 【Spring Boot】035-Spring Boot 整合 MyBatis Plus一、MyBatis Plus 概述1、简介2、特性3、结构图4、相…

LeetCode - 27. 移除元素 (C语言,快慢指针,配图)

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路一&#xff1a;新开辟一个数组&#xff0c;空间复杂度O(N) 因为本题要求是空间复杂度O(1),所以这里只是列出思路1的思路和配图&#xff0c;并没有具体的实现代码&#xff0c;想必这对大家一定很简单…

使用postman测试

第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;添加请求 第四步&#xff1a;填写请求 代码实现自动关联的位置&#xff1a; 为相关联的接口设置环境&#xff1a; 使用设置的环境变量&#xff1a; 参数化实现测试&#xff1a;测试脚本中仅测试数据不一样&#xff…

Promise 重写 (第一部分)

学习关键语句&#xff1a; promise 重写 写在前面 重新学习了怎么重写 promise &#xff0c; 我觉得最重要的就是要有思路&#xff0c;不然有些 A 规范是完全想不到的 开始 重写函数的过程中, 最重要的是有思路 我们从哪里获取重写思路? 从正常的代码中 我们先看正常的代码…

2023数维杯数学建模C题思路+代码+论文

目录 1.C题思路模型&#xff1a;比赛开始后&#xff0c;第一时间更新&#xff0c;获取见文末名片 2.竞赛注意事项&#xff1a;包括比赛流程&#xff0c;任务分配&#xff0c;时间把控&#xff0c;论文润色&#xff0c;已经发布在文末名片中 3.常用国赛数学建模算法 3.1 分…

『GitHub项目圈选02』一款可实现视频自动翻译配音为其他语言的开源项目

&#x1f525;&#x1f525;&#x1f525;本周GitHub项目圈选****: 主要包含视频翻译、正则填字游戏、敏感词检测、聊天机器人框架、AI 换脸、分布式数据集成平台等热点项目。 1、pyvideotrans pyvideotrans 是一个视频翻译工具&#xff0c;可将一种语言的视频翻译为另一种语…

学习c#的第十三天

目录 C# 多态性 静态多态性 函数重载 运算符重载 动态多态性 virtual 和 abstract 抽象方法和虚方法的区别 重载(overload)和重写(override) 隐藏方法 C# 多态性 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性意味着有多重形式。在面向对象编程范式中…

ReentrantLock通过Condition实现锁对象的监视器功能

公平锁和非公平锁只有两处不同&#xff0c;总结&#xff1a; 1、非公平锁在调用 lock 后&#xff0c;首先就会调用 CAS 进行一次抢锁&#xff0c;如果这个时候恰巧锁没有被占用&#xff0c;那么直接就获取到锁返回了。 2、非公平锁在 CAS 失败后&#xff0c;和公平锁一样都会进…

Postman的Cookie鉴权

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;什么是Cookie 定义&#xff1a;存储在客户端的一小段文本信息&#xff0c;格式为键值对的形式. 二&#xff09…

如何基于OpenCV和Sklearn算法库开展机器学习算法研究

大家在做机器学习或深度学习研究过程中&#xff0c;不可避免都会涉及到对各种算法的研究使用&#xff0c;目前比较有名的机器学习算法库主要有OpenCV和Scikit-learn&#xff08;简称Sklearn&#xff09;&#xff0c;二者都支持各种机器学习算法&#xff0c;主要有监督学习、无监…

无重复字符的最长子串 Golang leecode_3

刚开始的思路&#xff0c;先不管效率&#xff0c;跑出来再说&#xff0c;然后再进行优化。然后就有了下面的暴力代码&#xff1a; func lengthOfLongestSubstring(s string) int {// count 用来记录当前最长子串长度var count int// flag 用来对下面两个 if 语句分流var flag …

Leetcode刷题详解——岛屿数量

1. 题目链接&#xff1a;200. 岛屿数量 2. 题目描述&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上…

怎样正确做 Web 应用的压力测试?

面试的时候&#xff0c;很多后端或者QA的候选人都会跟我讲说有过压力测试的经验&#xff0c;但在我细问之后&#xff0c;极少有候选人能够把压力测试细节讲清楚。 这里整理一下我认为做压力测试时需要注意的一些细节。 1、环境 首先环境是非常重要的&#xff0c;需要尽可能跟…

Spring Data JPA where in 超过 1000 解决方案

解决方案&#xff1a; 当在Spring Data JPA中使用WHERE IN子句时&#xff0c;如果IN中的元素数量超过1000&#xff0c;可能会导致错误。这是由于一些数据库对IN子句中的元素数量有限制。为了解决这个问题&#xff0c;你可以采取以下解决方案&#xff1a; 分页查询&#xff1a…

汽车OBD2蓝牙诊断仪解决方案程序开发

1、因TL718已经为你建立了物理层、数据链层和部分应用层的协议&#xff0c;所以只要OBD2标准应用层协议文本&#xff0c;ISO15031-5 或 SAE J1979&#xff08;这两个协议是相同的内容&#xff09;。 2、TL718诊断接口 1 套或用TL718芯片自建电路。3、家用PC机电脑一台。4、安…

计算机网络——物理层-编码与调制(数字基带信号、模拟基带信号、码元、常用编码、基本调制方法、混合调制)

目录 编码与调制 数字基带信号 模拟基带信号 码元 常用编码 不归零编码 归零编码 曼彻斯特编码 差分曼彻斯特编码 编码习题 基本调制方法 调幅 调频 调相 混合调制 QAM-16 编码与调制 在计算机网络中&#xff0c;计算机需要处理和传输用户的文字、图片、音频…

深度学习AI识别人脸年龄

以下链接来自 落痕的寒假 GitHub - luohenyueji/OpenCV-Practical-Exercise: OpenCV practical exercise https://download.csdn.net/download/luohenyj/10993309 import cv2 as cv import time import argparsedef getFaceBox(net, frame, conf_threshold0.7):frameOpencvDn…