博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言调用curl库抓取网页图片
阅读量:6566 次
发布时间:2019-06-24

本文共 1530 字,大约阅读时间需要 5 分钟。

思路是先用curl抓取网页源码,然后以关键字寻找出图片网址。
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
 
void get_key_from_str(char *origin, char *str1, char *str2, char *key);
 
int main(int argc, char **argv)
{
    CURL *curl;
    FILE *fp = NULL, *fp_read = NULL;
    int file_size = 0;
    char *tmp = NULL;
    int flag = 0;
    char key[1024] = {0};
    char str1[128] = {0};
    char str2[128] = {0};
 
    if ((fp = fopen("test.txt", "w")) == NULL)
    {
        return 1;
    }
 
    curl = curl_easy_init();
 
    if (curl)
    {
        flag = 1;
        curl_easy_setopt(curl, CURLOPT_URL, argv[1]);     //curl设置网址
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);     //将网页源码存在文件中,好像只能存文件,不能存字符串
 
        curl_easy_perform(curl);//开始抓取
 
        curl_easy_cleanup(curl);
 
        fclose(fp);
 
        fp_read = fopen("test.txt", "rb");
        fseek(fp_read, 0, SEEK_END);      //把指针移到文本最后
        file_size = ftell(fp_read)     ;//算出文本大小
        fseek(fp_read, 0, SEEK_SET);     //再把指针移到最前面
        tmp = (char *)malloc(file_size * sizeof(char));     //malloc一段内存
 
        printf("file_size:%d\n", file_size);
 
 
        fread(tmp, file_size, sizeof(char), fp_read);     //读取文件
 
        fclose(fp_read);
 
        snprintf(str1, sizeof(str1), "img src=\"");
        snprintf(str2, sizeof(str2), "\"");
 
        get_key_from_str(tmp, str1, str2, key);     //取得网址
 
        printf("key:%s\n", key);
        free(tmp);
    }
 
    if (!flag)
    {
        fclose(fp);
    }
 
    return 0;
}
//抓取str1和str2之间的关键字
void get_key_from_str(char *origin, char *str1, char *str2, char *key)
{
    char *p = strstr(origin, str1);
    char *q = strstr(p + strlen(str1), str2);
 
    int len = q - p - strlen(str1);
 
    snprintf(key, len + 1, "%s", p + strlen(str1));
    key[len + 1] = '\0';
}
 
gcc -g -Wall main.c -o test -lcurl
 
./test url
即可

转载地址:http://mocjo.baihongyu.com/

你可能感兴趣的文章
J2EE的13种核心技术
查看>>
VMware中安装CentOS7网络配置静态IP地址,常用配置和工具安装
查看>>
【JavaScript吉光片羽】遭遇IE8
查看>>
HTTP请求响应码
查看>>
http://www.fx114.net/qa-24-116329.aspx
查看>>
法总统:英国若“无协议脱欧” 将成最大输家
查看>>
阿里巴巴宣布开源限流降级中间件——Sentinel
查看>>
以OpenGL/ES视角介绍gfx-hal(Vulkan) Framebuffer接口使用
查看>>
我为什么选择使用容器?
查看>>
如何提高 Xcode 的编译速度
查看>>
杂篇-从整理文件发起的杂谈[-File-]
查看>>
【临实战】使用 Python 处理 Nginx 日志
查看>>
Python中最好用的命令行参数解析工具
查看>>
LeetCode14.最长公共前缀 JavaScript
查看>>
"Hotpatch"潜在的安全风险
查看>>
下载文件的15种方法
查看>>
CSS
查看>>
Netty源码解析1-Buffer
查看>>
动态网站的爬取
查看>>
小知识一、让Swift继续用OC#warning效果
查看>>