汽车之家车型_车系_配置参数数据抓取
// 导入所需的库
#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()函数来解析网页内容并打印出匹配到的信息。
相关文章:
汽车之家车型_车系_配置参数数据抓取
// 导入所需的库 #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 ca…...
RabbitMQ的 五种工作模型
RabbitMQ 其实一共有六种工作模式: 简单模式(Simple)、工作队列模式(Work Queue)、 发布订阅模式(Publish/Subscribe)、路由模式(Routing)、通配符模式(Topi…...
原型制作神器ProtoPie的使用Unity与网页跨端交互
什么是ProtoPie? ProtoPie是一款面向设计师的软件原型设计工具,例如制作App界面交互展示,制作好的原型可以一键发布到Web服务器,就可以浏览器访问。由于其内置了大量常用交互类型,以及"程序化"模块…...
另辟奚径-Android Studio调用Delphi窗体
大家都知道Delphi能调用安卓SDK,比如jar、aar等, 但是反过来,能在Android Studio中调用Delphi开发的窗体吗? 想想不太可能吧, Delphi用的是Pascal,Android Studio用的是Java,这两个怎么能混用…...
SOLID 原则,程序设计五大原则,设计模式
SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle):修改一个类的原因只能有一个。开闭原则(Open/Closed Principle):对于扩展,类应该是“开放”的;对于修改&…...
Java基础——数组(一维数组与二维数组)
文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明: 数组是引用数据类型,数组的元素是同一类型的任何数据类型,包括基本数据类型和引用数据类型…...
Python爬虫抓取微博数据及热度预测
首先我们需要安装 requests 和 BeautifulSoup 库,可以使用以下命令进行安装: pip install requests pip install beautifulsoup4然后,我们需要导入 requests 和 BeautifulSoup 库: import requests from bs4 import BeautifulSou…...
Qt QTableWidget表格的宽度
默认值 QTableWIdget的表格宽度默认是一个给定值,可以手动调整每列的宽度,也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...
OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)
1、引言 通过opencv_apps,你可以在ROS中以最简单的方式运行OpenCV提供的许多功能,也就是说,运行一个与功能相对应的launch启动文件,就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码,非常的方便。 对于想熟悉每个…...
常见排序算法之插入排序类
插入排序,是一种简单直观的排序算法,工作原理是将一个记录插入到已经排好序的有序表中,从而形成一个新的、记录数增1的有序表。在实现过程中,它使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循…...
Dubbo服务消费端远程调用过程剖析
1 Dubbo服务消费端远程调用过程概述 (1)当消费方调用远程服务的方法时,会被InvokerInvocationHandler拦截,执行其invoke()方法,创建RpcInvocation对象; (2)接着会选择远程调用的负…...
华硕荣获“EPEAT Climate+ Champion”永续先驱称号
华硕持续深耕永续理念,努力提供低碳排放、高效能产品,并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺,并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…...
基于QT使用OpenGL,加载obj模型,进行鼠标交互
目录 功能分析(需求分析)技术点分析OpenGL立即渲染模式可编程渲染管线模式 QOpenGLWidget派生类 glwidget逻辑glwidget.hglwidget.cpp 鼠标交互功能obj格式介绍 效果bunnyCayman_GT 功能分析(需求分析) 基于QT平台,使…...
三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop
2023 年一众黑客松赛事中,为什么我们建议您选择波卡黑客松大赛?或许答案在于——作为开发者极度友好的技术生态,波卡能够从参赛者的立场出发,为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…...
数据结构与算法(Java版) | 算法的空间复杂度简介
关于算法的空间复杂度,下面我给大家作一个简单介绍。 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,同样,它也是问题规模n的一个函数。 其实,…...
大数据-之LibrA数据库系统告警处理(ALM-12037 NTP服务器异常)
告警解释 当NTP服务器异常时产生该告警。 当NTP服务器异常消除时,该告警恢复。 告警属性 告警ID 告警级别 可自动清除 12037 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 RoleName 产生告警的角色名称。 HostName 异常N…...
烟草5G智慧工厂数字孪生可视化平台,赋能烟草工业数字化智慧转型
随着卷烟工厂提质增效需求增强,信息化建设推进及生产制造系统智能化改革发展,各生产单元逐步升级完善数字化,最终实现智能制造成为必然趋势。因此,5G卷烟加工工厂的数字化转型迫在眉睫。中国烟草制造行业正迈向全新的市场经济时代…...
PHP编写采集药品官方数据的程序
在 PHP 中编写爬虫程序,首先我们需要引入一些必要的库,如 curl 和 file_get_contents。然后,我们需要设置爬虫ip信息,以便我们可以从指定的爬虫ip服务器上获取数据。 // 引入必要的库 require_once curl.php;// 设置爬虫ip信息 $p…...
解决Jenkins执行git脚本时报错:No such device or address问题
问题现象: Jenkins执行BeanShell脚本时,报错:jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案: 解决服务器拉取git仓库的代码权限,使用高级子模块克隆功能。…...
LCD英文字模库(16x8)模拟测试程序
字模 字模,就是把文字符号转换为LCD能识别的像素点阵信息。 电子发烧友可能都熟悉字模的用途。就是调用者通过向LCD模块发送字模数据,LCD根据字模数据在LCD面板上相应的像素描绘出图形或文字。 现在,大部分的LCD都内置了字模库,…...
水下机器人开发3大技术瓶颈与UUV Simulator解决方案
水下机器人开发3大技术瓶颈与UUV Simulator解决方案 【免费下载链接】uuv_simulator Gazebo/ROS packages for underwater robotics simulation 项目地址: https://gitcode.com/gh_mirrors/uu/uuv_simulator 水下机器人开发面临动力学建模复杂、传感器数据稀缺、控制算法…...
Cesium与WebXR融合:从零构建VR地理空间应用
1. 为什么需要Cesium与WebXR的融合? 我第一次在VR头盔里看到三维地球的时候,整个人都惊呆了。那种站在太空俯瞰地球的沉浸感,完全颠覆了传统屏幕的浏览体验。但当我尝试把现有的Cesium项目移植到VR环境时,发现事情没那么简单——视…...
电动履带三轮车设计与实现:从原理到工程实践
1. 项目概述:打造一台电动履带三轮车去年参加EMF露营活动时,看到那些酷炫的家伙们骑着各种改装车穿梭营地,我就暗下决心:明年一定要搞个更拉风的玩意儿。经过三个月的折腾,这台被朋友们称为"TrakTrike"的电动…...
Material Icon Library开源贡献指南:如何参与项目开发和维护
Material Icon Library开源贡献指南:如何参与项目开发和维护 【免费下载链接】material-icon-lib Library containing over 2000 material vector icons that can be easily used as Drawable or as a standalone View. 项目地址: https://gitcode.com/gh_mirrors…...
从ARM工程师视角看ZYNQ:我的第一个AX7020项目如何打通PS与PL?
从ARM工程师视角看ZYNQ:我的第一个AX7020项目如何打通PS与PL? 作为一名长期深耕ARM架构的嵌入式开发者,当我第一次拿到AX7020开发板时,那种既熟悉又陌生的感觉至今记忆犹新。熟悉的Cortex-A9处理器核与陌生的FPGA可编程逻辑单元共…...
别再死磕COE文件了!Vivado里用$readmemb/h给RAM上电初始化的正确姿势(附避坑指南)
Vivado中RAM初始化的终极方案:告别COE文件,掌握$readmemb/h的正确用法 在FPGA开发中,RAM初始化是个看似简单却暗藏玄机的环节。许多开发者都曾陷入这样的困境:按照官方文档和主流教程使用COE文件初始化IP核,结果上电后…...
3分钟快速指南:如何用extract-video-ppt从视频中智能提取PPT演示文稿
3分钟快速指南:如何用extract-video-ppt从视频中智能提取PPT演示文稿 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经遇到过这样的情况:观看了一个…...
【ArcGIS Pro二次开发】:三调地类面积精准统计与数据清洗实战
1. 三调地类面积统计的业务痛点 做国土调查数据处理的朋友都知道,三调数据最让人头疼的就是地类名称不规范。我去年接手一个省级三调项目时,光是清理"养殖坑塘"这类非标准表述就花了整整两周。不同作业单位提交的数据里,光是坑塘水…...
实战指南:如何在Linux驱动开发中正确使用queue_work函数
实战指南:如何在Linux驱动开发中正确使用queue_work函数 在Linux内核开发中,异步任务处理是驱动工程师必须掌握的技能之一。想象一下,当你正在开发一个需要响应硬件中断的驱动程序,同时又不想让中断处理程序(ISR&#…...
Element UI导航栏折叠时,如何优雅解决图标和文字错位问题?
Element UI导航栏折叠时的UI优化实战指南 最近在重构后台管理系统时,发现Element UI的导航栏折叠功能虽然开箱即用,但在实际项目中总会遇到各种UI细节问题。特别是当导航栏处于折叠状态时,图标错位、文字溢出、动画生硬等问题频频出现&#x…...
