c++ curl 的简单使用和从网页上抓取图片的代码

1. 简单配置

  • 安装curl
  • apt-get curl 
  • 安装c++的库 libcurl4-openssl-dev
  • apt-get libcurl4-openssl-dev

2. 写代码时几个重要函数的介绍

  • curl_easy_init () / curl_easy_cleanup ()
  • CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter) 
  • 这个函数最重要;http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  • CURLOPT_URL : 第三个参数设置为想要访问的URL
  • CURLOPT_HEADER : 文件头部信息是否可见第三个参数为不可见0
  • CURLOPT_HEADERFUNCTION : 当接收到头部信息时调用设置的回调函数
  • CURLOPT_VERBOSE : 是否报告异常0不接收
  • CURLOPT_TIMEOUT : 设置CURL允许执行的最长秒数
  • CURLOPT_DNS_CACHE_TIMEOUT : 设置超时,默认的DNS cache的超时时间为60秒
  • CURLOPT_WRITEFUNCTION : 设置内容写回的回调函数
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抓取网页内容需要用到网络编程和HTML解析技术,这里给出一个基于C++的示例代码使用了libcurl和libxml2库: ```cpp #include <curl/curl.h> #include <libxml/HTMLparser.h> #include <iostream> #include <string> #include <vector> // 回调函数,处理libcurl返回的网页内容 static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) { size_t realsize = size * nmemb; std::string* str = (std::string*)userp; str->append((char*)contents, realsize); return realsize; } // 解析HTML内容,提取中文文本 static void ParseHtml(const std::string& html, std::vector<std::string>& result) { htmlDocPtr doc = htmlReadDoc((xmlChar*)(html.c_str()), NULL, NULL, HTML_PARSE_NOERROR | HTML_PARSE_NOWARNING); if (!doc) { std::cerr << "Failed to parse HTML" << std::endl; return; } xmlNodePtr cur = xmlDocGetRootElement(doc); while (cur && cur->type != XML_ELEMENT_NODE) { cur = cur->next; } while (cur) { if (cur->type == XML_ELEMENT_NODE) { if (xmlStrcmp(cur->name, (const xmlChar*)"script") == 0 || xmlStrcmp(cur->name, (const xmlChar*)"style") == 0) { // 忽略脚本和样式标签 cur = cur->next; continue; } xmlChar* text = xmlNodeGetContent(cur); if (text) { std::string str = (char*)text; int len = str.length(); for (int i = 0; i < len; i++) { if (str[i] >= 0x4e00 && str[i] <= 0x9fa5) { // 只保留中文字符 result.push_back(str.substr(i, 1)); } } xmlFree(text); } } cur = cur->next; } xmlFreeDoc(doc); } int main(int argc, char** argv) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " url" << std::endl; return 1; } CURL* curl = curl_easy_init(); if (!curl) { std::cerr << "Failed to initialize libcurl" << std::endl; return 1; } std::string html; std::vector<std::string> result; curl_easy_setopt(curl, CURLOPT_URL, argv[1]); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &html); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cerr << "Failed to fetch URL: " << curl_easy_strerror(res) << std::endl; curl_easy_cleanup(curl); return 1; } ParseHtml(html, result); for (const auto& str : result) { std::cout << str; } std::cout << std::endl; curl_easy_cleanup(curl); return 0; } ``` 这个代码可以从命令行接收一个网页链接作为参数,抓取网页内容并解析出中文文本,输出到标准输出。你可以根据自己的需求修改代码,比如改为从文件中读取链接列表,抓取多个网页的内容等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值