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


    // 导入所需的库
    #include 
    #include 
    #include 
    #include 
    #include 
    
    // 声明全局变量
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

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

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

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

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

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

  • 相关阅读:
    FAT12文件系统
    机器学习——集成学习
    基于JAVA-游戏账号交易平台-演示录像-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    c语言分层理解(c语言文件操作)
    超基础Java练习题,包含for循环、九九乘法表 、嵌套循环结构
    【Unity编辑器扩展】 | 编辑器扩展 特性(Attribute) 整理总结 | 建议收藏
    画程序流程图
    【每日一题】1041. 困于环中的机器人
    【AGC】如何创建自定义应用内消息
    git pull
  • 原文地址:https://blog.csdn.net/D0126_/article/details/134305039