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

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库
#include <iostream>
#include <fstream>
#include <string>
#include <curl/curl.h>
#include <regex>// 声明全局变量
std::string htmlContent;
std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}");
std::regex carSeriesRegex("\\d{4}-\\d{2}-\\d{2}");
std::regex carConfigRegex("\\d{4}-\\d{2}-\\d{2}");// 定义函数来获取网页内容
std::string getHtmlContent(const std::string& url) {CURL* curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, static_cast<size_t>([](void* buffer, size_t size, size_t nmemb, std::string* str) -> size_t {str->append((char*)buffer, size * nmemb);return size * nmemb;}));curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlContent);CURLcode res = curl_easy_perform(curl);curl_easy_cleanup(curl);if (res != CURLE_OK) {std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;}return htmlContent;} else {std::cerr << "curl_easy_init() failed" << std::endl;return "";}
}// 定义函数来解析网页内容
void parseHtmlContent(const std::string& htmlContent) {std::smatch match;if (std::regex_search(htmlContent, match, carModelRegex)) {std::cout << "车型: " << match.str() << std::endl;}if (std::regex_search(htmlContent, match, carSeriesRegex)) {std::cout << "车系: " << match.str() << std::endl;}if (std::regex_search(htmlContent, match, carConfigRegex)) {std::cout << "配置参数: " << match.str() << std::endl;}
}int main() {std::string proxy_host = "jshk.com.cn"; // 换成实际的代理服务器地址CURL* curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host.c_str());curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, static_cast<size_t>([](void* buffer, size_t size, size_t nmemb, std::string* str) -> size_t {str->append((char*)buffer, size * nmemb);return size * nmemb;}));curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlContent);CURLcode res = curl_easy_perform(curl);curl_easy_cleanup(curl);if (res != CURLE_OK) {std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;}parseHtmlContent(htmlContent);} else {std::cerr << "curl_easy_init() failed" << std::endl;}return 0;
}

在这个示例中,我们首先导入了所需的库,然后声明了三个全局变量,用于存储匹配到的车型、车系和配置参数。

然后,我们定义了一个函数来获取网页内容。在这个函数中,我们使用了libcurl库来发送HTTP请求并获取网页内容。如果请求失败了,我们就打印出错误信息并返回。

接下来,我们定义了一个函数来解析网页内容。在这个函数中,我们使用了正则表达式来匹配我们需要的信息。如果匹配成功了,我们就打印出匹配到的信息。

在主函数中,我们首先设置了要爬取的网页地址和代理信息,然后使用curl_easy_init()函数创建一个CURL会话对象。我们设置了请求的URL、代理服务器和端口,然后调用curl_easy_perform()函数发送请求并获取网页内容。如果请求失败了,我们就打印出错误信息并退出。

最后,我们调用parseHtmlContent()函数来解析网页内容并打印出匹配到的信息。在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端设计模式之【工厂模式】
  • 2311rust无畏并发.
  • C#基于inpoutx64读写ECRAM硬件信息
  • 机器学习---多分类SVM、支持向量机分类
  • FFMPEG库实现mp4/flv文件(H264+AAC)的封装与分离
  • 中文编程软件视频推荐,自学编程电脑推荐,中文编程开发语言工具下载
  • SDN和NFV笔记
  • k8s docker cgroup驱动问题 —— 筑梦之路
  • HTTPS安全相关-通信安全的四个特性-ssl/tls
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • 【Proteus仿真】【51单片机】水质监测报警系统设计
  • 城市内涝积水的原因有哪些?万宾科技内涝积水监测仪工作原理
  • JSON方法实现深拷贝存在的问题
  • 2022年12月 Python(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • JavaScript中的Math
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Centos6.8 使用rpm安装mysql5.7
  • CSS实用技巧干货
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JAVA并发编程--1.基础概念
  • Java小白进阶笔记(3)-初级面向对象
  • java中具有继承关系的类及其对象初始化顺序
  • Ruby 2.x 源代码分析:扩展 概述
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 高度不固定时垂直居中
  • 前嗅ForeSpider中数据浏览界面介绍
  • 深度学习入门:10门免费线上课程推荐
  • 使用putty远程连接linux
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我感觉这是史上最牛的防sql注入方法类
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • kubernetes资源对象--ingress
  • ​Linux·i2c驱动架构​
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # centos7下FFmpeg环境部署记录
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Linux(make工具和makefile文件以及makefile语法)
  • $.ajax中的eval及dataType
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二)正点原子I.MX6ULL u-boot移植
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • *** 2003
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net 程序发生了一个不可捕获的异常
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换