用C语言采集亚马逊amazon产品数据

news2025/3/10 5:20:47

上一篇文章我是用C++写的一个爬取亚马逊的爬虫程序,相信大家已经看过了,这次呢,我依然使用C语言来写一个爬虫,大体上思路是和之前一样,只是支持的库以及语法有些区别,具体的呢我会一一解释出来,方便大家查阅。

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>

int main() {
    CURL *curl;
    CURLcode res;
    char *url = "https://www.amazon.com";
    // 提取爬虫ip jshk.com.cn/mb/reg.asp?kefu=xjy&csdn
    char *proxy_host = "duoip";
    int proxy_port = 8000;
    char *ch = NULL;
    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ch);
        curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);
        curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);
        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();
    if(ch) free(ch);
    return 0;
}

1、#include <stdio.h>:这个头文件包含了标准输入输出文件流的定义和函数声明。

2、#include <stdlib.h>:这个头文件包含了各种系统函数的定义和声明,如malloc、free等。

3、#include <string.h>:这个头文件包含了各种字符串函数的定义和声明,如strcpy、strlen等。

4、#include <curl/curl.h>:这个头文件包含了libcurl库函数的定义和声明。

5、int main() { ..、}:这是一个标准的C程序的主函数入口。

6、CURL *curl;:这是一个全局变量,用于存放libcurl库的句柄。

7、CURLcode res;:这是一个全局变量,用于存放libcurl库的错误代码。

8、char *url = "https://www.amazon.com";:这是一个字符串指针,用于存放要访问的URL。

9、char *proxy_host = "duoip";:这是一个字符串指针,用于存放代理服务器的主机名。

10、int proxy_port = 8000;:这是一个整数变量,用于存放代理服务器的端口号。

11、char *ch = NULL;:这是一个字符串指针,用于存放libcurl库的返回数据。

12、curl_global_init(CURL_GLOBAL_DEFAULT);:这是一个libcurl库的函数,用于初始化libcurl库。

13、curl = curl_easy_init();:这是一个libcurl库的函数,用于创建一个libcurl库的句柄。

14、if(curl) { ..、}:这是一个if语句,用于判断libcurl库的句柄是否成功创建。

15、curl_easy_setopt(curl, CURLOPT_URL, url);:这是一个libcurl库的函数,用于设置要访问的URL。

16、curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);:这是一个libcurl库的函数,用于设置数据写入函数。

17、curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ch);:这是一个libcurl库的函数,用于设置数据写入的数据指针。

18、curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);:这是一个libcurl库的函数,用于设置代理服务器的主机名。

19、curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);:这是一个libcurl库的函数,用于设置代理服务器的端口号。

20、res = curl_easy_perform(curl);:这是一个libcurl库的函数,用于发送请求并获取响应。

21、if(res != CURLE_OK) { ..、}:这是一个if语句,用于判断libcurl库的错误代码是否为CURLE_OK,即请求是否成功。

22、fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));:这是一个标准库函数,用于输出错误信息。

23、curl_easy_cleanup(curl);:这是一个libcurl库的函数,用于清除libcurl库的句柄。

24、curl_global_cleanup();:这是一个libcurl库的函数,用于清除libcurl库的全局数据。

25、if(ch) free(ch);:这是一个if语句,用于判断ch是否为空指针,如果是则调用free函数释放ch所指向的内存。

26、return 0;:这是一个标准的C程序的返回值,表示程序成功运行。

以上就是今天我编程的全部内容,其实总体思路还是和上一篇差不多。只是这次使用的库不同,但是都一样能达到自己想要的效果,两者选其一就行。如果有更多有趣好玩的爬虫代码,记得评论区留言给我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DHCP动态主机配置协议

文章目录 DHCP1、DHCP的优势2、DHCP的分配方式3、DHCP的租约过程4、服务器配置命令格式命令图文详解 DHCP DHCP&#xff1a;动态主机配置协议 1、DHCP的优势 减少管理员的工作量 避免输入错误的可能 避免IP地址冲突 当更改IP地址段时&#xff0c;不需要重新配置每个用户的…

【教学类-44-03】20240111阿拉伯数字字帖的字体(三)——德彪钢笔行书(实线字体)和print dashed(虚线字体)

作品展示: 背景需求&#xff1a; 一、寻找适合幼儿书写的数字描字帖&#xff0c;文鼎标楷国字体有部分数字补符合我的要求 【教学类-44-02】20231226阿拉伯数字字帖的字体&#xff08;二&#xff09;——文鼎标楷国字体 AR StdKaiGDLB5 Md&#xff08;虚线字体&#xff09;-CS…

SpringBoot知识03

1、多模块项目无法启动&#xff0c;报错Failed to execute goal on project*: Could not resolve dependencies for project

【Unity】Attribute meta-data#com.google.android.play.billingclient.version 多版本库冲突

文章目录 一、背景二、问题描述三、解决方案 一、背景 1、Unity 2021.3.9f1 2、Max由6.0.1至最新版本6.1.0 二、问题描述 错误信息 Attribute meta-data#com.google.android.play.billingclient.versionvalue value(6.1.0) from [com.android.billingclient:billing:6.1.0] An…

python图像处理总结

等我有时间了&#xff0c;好好总结一下这几个图像处理包&#xff0c;为后面的研究做个铺垫 skimage包 可以用系统自带的图片&#xff0c;不用自己找图片 from skimage.io import imread, imshow from skimage import data image data.astronaut() imshow(image)后面可以拿这…

Maven环境搭建及Maven部分目录分析

一、安装Maven Maven 本身就是⼀套由 Java 开发的软件&#xff0c;所以 Maven 的运⾏需要依赖 JDK 环境。在安装 Maven 之前请 确认JDK 是否配置正确&#xff08;主要依赖 JAVA_HOME 环境变量&#xff09;。如果没有正确安装和配置 JDK &#xff0c;则运⾏ Maven 时 会出现以下…

“一键转换PNG至BMP:轻松批量处理,高效优化图片管理“

在数字世界中&#xff0c;图片格式的转换是日常工作中不可或缺的一部分。你是否经常遇到需要将PNG格式的图片转换为BMP格式的需求&#xff1f;是否在处理大量图片时&#xff0c;希望能够实现一键批量转换&#xff0c;提高工作效率&#xff1f; 首先&#xff0c;我们进入首助编…

vue前端开发自学基础,动态切换组件的显示

vue前端开发自学基础,动态切换组件的显示&#xff01;这个是需要借助于&#xff0c;一个官方提供的标签&#xff0c;名字叫【Component】-[代码demo:<component :is"ComponetShow"></component>]。 下面看看代码详情。 <template><h3>动态…

三、Qt Creator 使用

关于Qt的安装及环境配置&#xff0c;在我的上一篇《二、QT下载、安装及问题解决(windows系统)》已经讲过了。 本章节有一个重点&#xff0c;在新建 工程文件时&#xff0c;所在路径不要有中文&#xff0c;否则编译及运行程序不能正常运行。 在使用Qt Creator&#xff08;以下…

解决Spss没有创建虚拟变量的选项的问题

这个是今天用spss想创建虚拟变量然后发现我的spss没有。 然后能怎么办我就百度呗&#xff0c; 说是在扩展里连接扩展中心 天哪&#xff0c;谁能连上&#xff0c;我连不上 于是就找到了从github上下载到本地&#xff0c;然后安装到spss中 目录 解决方法 点击code 再点击D…

9.5.1 函数模板特化

函数模板 有了泛化版本比较函数&#xff0c;我们可以比较两个整数&#xff0c;两个字符&#xff0c;两个指针 6~10行&#xff0c;是一个函数模板 13~16行&#xff0c;都可以得到正常结果 22行&#xff0c;得到的结果是&#xff0c;"A001" < "A000", …

openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话

文章目录 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话196.1 强制结束指定的问题会话196.1.1 问题现象196.1.2 处理办法 openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会话 196.1 强制结束指定的…

AI剪辑助手:轻松剪辑专注创意,视频批量AI智剪的方法

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在许多领域都展现出了强大的能力。在视频剪辑领域&#xff0c;AI剪辑助手的出现&#xff0c;给内容创作者带来了前所未有的便利。它不仅能快速、高效地完成视频剪辑工作&#xff0c;还能释放创造力。今天一起…

为什么选择Go语言编写网络应用程序

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等&#xff0c;您的关注将是我的更新动力&#xff01; 作为一名后端开发者&#xff0c;你一定对选择合适的编程语言来编写网络应用程序非常重视。在众多的编程语言中&#xff0c;Go语言…

Redis如何把字符集的编码格式设置为UTF-8

一、问题复现&#xff08;编码错乱&#xff09; 刚安装好的redis在使用的过程中&#xff0c;若使用到了汉字&#xff0c;则在显示的时候&#xff0c;汉字是不能够正常显示的&#xff0c;因为redis在解析的过程中&#xff0c;会将汉字转换成其他编码的格式&#xff0c;如下图&am…

软件测试|pycharm关联GitHub的详细步骤

简介 GitHub 是全球最大的开源代码托管平台之一&#xff0c;而 PyCharm 是一款强大的 Python 集成开发环境。将两者结合使用&#xff0c;可以提高团队协作和代码管理的效率。本文将详细介绍如何在 PyCharm 中管理 GitHub 账号&#xff0c;包括如何设置 GitHub 账号、创建新仓库…

linux环境下安装postgresql

PostgreSQL: Linux downloads (Red Hat family)postgresql官网 PostgreSQL: Linux downloads (Red Hat family) 环境&#xff1a; centos7 postgresql14 选择版本 执行启动命令 配置远程连接文件 vi /var/lib/pqsql/14/data/postgresql.conf 这里将listen_addresses值由lo…

C语言天花板——指针(经典题目)

指针我们已经学习的差不多了&#xff0c;今天我来给大家分享几个经典的题目&#xff0c;来让我们相互学习&#x1f3ce;️&#x1f3ce;️&#x1f3ce;️ int main() {int a[4] { 1, 2, 3, 4 };int* ptr1 (int*)(&a 1);int* ptr2 (int*)((int)a 1);printf("%x,%…

Open3D AABB包围盒计算与使用(19)

Open3D AABB包围盒计算与使用(19) 一、算法速览二、算法实现1.代码2.结果少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 一、算法速览 AABB包围盒就是将点云用一个各条边沿着坐…

深度解析JVM类加载器与双亲委派模型

概述 Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心&#xff0c;其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念&#xff0c;并解释它们在实际开发中的应用。 1. 什么是类加载器&#xff1f; 类加载器是JVM的一部分&#xff0c;负…