// 导入所需的库
#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()函数来解析网页内容并打印出匹配到的信息。