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.hqwc.cn/news/171723.html

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

相关文章

MySQL主从延时问题

过线上 MySQL 维护经验的童鞋都知道&#xff0c;主从延迟往往是一个让人头疼不已的问题。 不仅仅是其造成的潜在问题比较严重&#xff0c;而且主从延迟原因的定位尤其考量 DBA 的综合能力&#xff1a;既要熟悉复制的内部原理&#xff0c;又能解读主机层面的资源使用情况&#…

SQL-----STUDENT

【学生信息表】 【宿舍信息表】 【宿舍分配表】 为了相互关联&#xff0c;我们需要在表中添加外键。在宿舍分配表中添加用于关联学生信息表的外键 student_id&#xff0c;以及用于关联宿舍信息表的外键 dormitory_id&#xff1b; sql代码 -- 创建学生信息表 CREATE TABLE st…

详细的完美转发

不要假装努力&#xff0c;结果不会陪你演戏。文章目录 完美转发的使用场景完美转发 完美转发的使用场景 请看下面的这个代码 #include<iostream> using namespace std; void func(int&& t) {cout<<"int&&"<<endl;return; } void…

牛客网刷题笔记231112 最小k位数+二叉树层序遍历+SQL异常邮件概率

算法题牛客网NC119 最小的k个数 题目&#xff1a; 用了一下python列表的便利&#xff0c;不知道在面试时允许用不。当然最简单的方法其实是直接sort()一下取前k位数即可。本次写的思路如下&#xff1a; 用一个最大容量为k的列表存储结果&#xff0c;遍历n个元素&#xff0c;当…

漏洞复现--IP-guard flexpaper RCE

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

绿盟远程安全评估系统 RSAS 使用体验-难用

最近领导让我用公司采购的RSAS对产品进行漏洞扫描&#xff0c;学习并使用了这个软件&#xff0c;体验就是真的很难用。使用遇到问题时&#xff0c;咨询售后服务&#xff0c;机器人需要有公司认证&#xff0c;不能随便问问题&#xff0c;也是无语了。咨询客服&#xff0c;客服回…

TCP与UDP

文章目录 TCP与UDP传输层的作用端口号UDPTCPUDP首部的格式TCP首部格式 TCP与UDP TCP/IP中有两个具有代表性的传输层协议&#xff0c;它们分别是TCP和UDP。TCP提供可靠的通信传输&#xff0c;而UDP则常被用于让广播和细节控制交给应用的通信传输。总之&#xff0c;根据通信的具…

条码管理在WMS仓储管理系统中的应用

在当今快节奏的商业环境中&#xff0c;仓储管理对于企业的运营和成本控制具有重要意义。为了提高管理效率和准确性&#xff0c;越来越多的企业开始采用条码管理WMS系统。本文将介绍这一系统的应用场景、条码引入WMS仓储管理系统的步骤以及其在仓储管理中的应用价值&#xff0c;…

Windows如何正确设置PHP环境变量以在Git Bash中运行命令

1、随便找一个目录&#xff0c;鼠标右键打开git bash here 2、cd的根目录 3、找到php安装目录 4、 在根目录下打开 vim .bash_profile &#xff0c;添加环境变量&#xff0c;php地址根据自己的本地地址而定 PATH$PATH:/d/phpstudy_pro/Extensions/php/php7.3.4nts 添加后保存…

【数据结构】Lambda

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; Lambda表达式 1. 背景1.1 语法1.2 函…

二、Linux用户管理

Linux是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须向系统管理员申请一个账户&#xff0c;然后用这个账户进入系统。 每个Linux用户至少属于一个用户组。 用户家目录home下&#xff0c;有各个用户分别创建的家目录&#xf…

网络运维Day14

监控概述 监控的目的 报告系统运行状况每一部分必须同时监控内容包括吞吐量、反应时间、使用率等提前发现问题进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 监控的资源类别 公开数据 Web、FTP、SSH、数据库等应用服务TCP或UDP端口 私有数据 CPU、内…