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

news2024/11/20 20:39:01

以下是一个使用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.coloradmin.cn/o/1203885.html

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

相关文章

深度学习 机器视觉 人脸识别系统 - opencv python 计算机竞赛

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…

1003:两个整数的四则运算

题目描述&#xff1a;输入两个整数num1和num2&#xff0c;请你设计一个程序&#xff0c;计算并输出它们的和、差、积、整数商及余数。 输入&#xff1a;输入只有两个正整数num1、num2。 输出&#xff1a;输出占一行&#xff0c;包括两个数的和、差、积、商及余数&#xff0c;数…

为什么打开idea时,没有启动页面,如何解决?

更新idea2021.2后&#xff0c;当双击idea打开时&#xff0c;发现没有启动界面&#xff0c;直接进入IDEA界面&#xff0c;中间等待时间&#xff0c;让人误以为没有打开idea成功&#xff0c;使得多次点击idea图标。 解决方案就是 在idea界面菜单栏中找到帮助&#xff08;Help)&a…

在Spring Boot中使用进程内缓存和Cache注解

在Spring Boot中使用内缓存的时候需要预先知道什么是内缓存&#xff0c;使用内缓存的好处。 什么是内缓存 内缓存&#xff08;也称为进程内缓存或本地缓存&#xff09;是指将数据存储在应用程序的内存中&#xff0c;以便在需要时快速访问和检索数据&#xff0c;而无需每次都从…

「NLP+网安」相关顶级会议期刊 投稿注意事项+会议等级+DDL+提交格式

「NLP网安」相关顶级会议&期刊投稿注意事项 写在最前面一、会议ACL (The Annual Meeting of the Association for Computational Linguistics)IH&MMSec (The ACM Workshop on Information Hiding, Multimedia and Security)CCS (The ACM Conference on Computer and Co…

腾讯云新客户服务器88元/年,540元/3年,另有5年新用户服务器

在选择云服务器时&#xff0c;首先需要考虑的是性能与配置是否与自己的需求相匹配。对于小型网站或者个人博客&#xff0c;轻量应用服务器是一个不错的选择。腾讯云双十一活动中&#xff0c;2核2G轻量应用服务器的活动优惠价为88元/年&#xff0c;2核4G轻量应用服务器的活动优惠…

接口自动化测试流程、工具及其实践!

01、接口自动化测试简介 接口自动化测试是指通过编写脚本或使用自动化工具&#xff0c;对软件系统的接口进行测试的过程。接口测试是软件测试中的一种重要测试类型&#xff0c;主要用于验证系统组件之间的通信和数据交换是否正常。通过接口自动化测试可以快速发现接口中的问题…

【Linux】第十六站:进程地址空间

文章目录 一、程序地址空间1.内存的分布2.static修饰后为什么不会被释放3.一个奇怪的现象 二、进程地址空间1.前面现象的原因2.地址空间究竟是什么&#xff1f;3.为什么要有进程地址空间4.页表5.什么叫进程&#xff1f;6.进程具有独立性。为什么&#xff1f;怎么做到呢&#xf…

thinkPHP controller_suffix 使用方法

在‘config/route.php’配置’controller_suffix’ > true 后&#xff0c; 在controller里面所有的类都要添加Controller为后缀的名字。 在网页使用的时候不用输入Controller的后缀 访问方法,他默认自己带上controller后缀 这样做其实就为了规范controller类

[HCTF 2018]admin 1(四种解法!)

题目环境&#xff1a; 有登录和注册两个按钮 先注册一个admin用户 注册admin用户 显示admin用户已经被注册了 好&#xff0c;这就简单了&#xff0c;admin用户存在&#xff0c;但是不清楚admin用户的密码 尝试以下弱口令 第一种解法&#xff1a;密码爆破-尝试弱口令 进去login登…

[量子计算与量子信息] 2.1 线性代数

2.1 线性代数 符号对照表 量子力学中&#xff0c;向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示&#xff0c;可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ &#xff0c;可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示&#xff0c; ∣ 0 ⟩ \…

这个校园外卖平台凭什么做到单日盈利过2万的?

高校在无形之间已经跻身千亿市场&#xff0c;校园市场的消费潜力无需赘述&#xff0c;单看开学季高校的快递单量就能领略一二&#xff0c;校园创业成为了很多人的选择。 同样投身校园市场创业的杨先生&#xff0c;用自己的亲身经历&#xff0c;从时机到营销再到服务展开来告诉…

语音识别芯片在产品应用上的难点列举

语音识别技术&#xff0c;作为人工智能领域中的一颗璀璨明珠&#xff0c;已经广泛应用于用户交互、智能家居、语音助手等多个领域。它为我们的生活带来了诸多便利&#xff0c;使得我们可以更加高效地与电子设备进行互动。然而&#xff0c;语音识别技术的实现&#xff0c;依赖于…

C语言文件操作 | 文件分类、文件打开与关闭、文件的读写、文件状态、文件删除与重命名、文件缓冲区

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Python实现WOA智能鲸鱼优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

js编辑只取修改后的对象的属性和值

需求&#xff1a;在el-table的列表编辑操作后&#xff0c; 第一步&#xff1a;获取当前行数据&#xff0c;为对象&#xff1a;{}&#xff0c; 第二步&#xff1a;数据回填 第三步&#xff1a;编辑 第四步&#xff1a;请求后端接口 本文章操作就是在编辑完成后&#xff0c;只取编…

字典管理怎么使用,vue3项目使用若依的的字典管理模块

若依框架数据字典的使用_若依数据字典_哈哈水水水水的博客-CSDN博客 【精选】关于数据字典的理解与设计_数据字典怎么设计-CSDN博客 若依的字典值如何使用&#xff08;超详细图文教程&#xff09;_若依字典管理_丿BAIKAL巛的博客-CSDN博客 Vue3组合式API&#xff1a;getCurr…

Python实现WOA智能鲸鱼优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

使用vitis调试时debug按钮灰化无法进行操作

问题 使用vitis调试时debug按钮灰化无法进行操作。 原因 bitstream文件配置有误。 解决办法 重新配置正确的bitstream文件&#xff0c;如下&#xff1a;

正交试验DOE

它原本是日本学者为了质量管理而设计的试验。后来被用在算法的参数设计上&#xff0c;可以利用部分的试验确定出最合理的参数组合。 举个例子&#xff0c;比如遗传算法中的种群数pop&#xff0c;交叉概率pr&#xff0c;变异概率pm&#xff0c;以及迭代次数N&#xff0c;每个参…