帮公司抓取70个城市社区团购商品数据 小费拿到手软

2023-12-20 17:24:12

最近遇到一件事,比较搞笑,就是我前公司有个技术找我,问我能不能抓取到社区团购商品信息,因为以前我在前公司是专门负责技术的,没有我拿捏不了的代码,然后手底下有几个半吊子的敲代码的,不是我瞧不起他们,而是出来的代码运行各种问题,这不公司实在没辙了,知道我会帮忙,就说付点幸苦费,让我写一写,看样以前老板待我不薄的面子上,这个事情还是接了下来,具体实操代码我会一一列出来。

在这里插入图片描述

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

// 定义代理信息
const char* proxy_host = "duoip";
const int proxy_port = 8000;
// 获取代理IP:jshk.com.cn/mb/reg.asp?kefu=xjy&csdn

// 定义目标网页的url
const char* url = "http://www.example.com/community团购商品数据抓取";

// 定义文件路径
const char* save_path = "data.txt";

// 定义函数,用于获取网页内容
size_t write_data(void* ptr, size_t size, size_t nmemb, FILE* stream) {
  size_t total = size * nmemb;
  fwrite(ptr, size, nmemb, stream);
  return total;
}

// 定义函数,用于设置代理
void set_proxy(CURL* curl) {
  curl_easy_setopt(curl, CURLOPT_PROXY, proxy_host);
  curl_easy_setopt(curl, CURLOPT_PROXYPORT, proxy_port);
}

// 主函数
int main() {
  CURLcode res;

  // 创建一个CURL句柄
  CURL* curl = curl_easy_init();

  if(curl) {
    // 设置代理
    set_proxy(curl);

    // 设置下载文件保存路径
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, save_path);
    
    // 执行curl操作
    res = curl_easy_perform(curl);

    // 检查操作是否成功
    if(res != CURLE_OK) {
      fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
    }

    // 释放CURL句柄
    curl_easy_cleanup(curl);
  }

  return 0;
}

以上代码是一个使用libcurl库的C语言爬虫程序,用于爬取指定网址上的数据并保存到本地文件中。

1、#include<stdio.h>: 包含标准输入/输出库,用于打印输出信息。

2、#include<string.h>: 包含字符串处理库,用于处理字符串数据。

3、#include<curl/curl.h>: 包含libcurl库,用于实现CURL操作。

4、#include<libgen.h>: 包含通用路径处理库,用于处理文件路径。

5、const char* proxy_host = "duoip";: 定义代理信息,这里设置为"duoip",具体可根据实际情况修改。

6、const int proxy_port = 8000;: 定义代理端口号,这里设置为8000,具体可根据实际情况修改。

7、const char* url = "http://www.example.com/community团购商品数据抓取";: 定义目标网页的URL,这里设置为"www.example.com/community团购商品数据抓取",具体可根据实际情况修改。

8、const char* save_path = "data.txt";: 定义文件保存路径,这里设置为"data.txt",具体可根据实际情况修改。

9、size_t write_data(void* ptr, size_t size, size_t nmemb, FILE* stream): 定义一个回调函数,用于处理下载的数据。当libcurl接收到网页数据时,会调用这个函数将数据写入到指定的文件中。

10、void set_proxy(CURL* curl): 定义一个函数,用于设置代理信息。当创建CURL句柄时,需要调用这个函数设置代理信息。

11、int main(): 主函数,用于执行整个爬虫程序。

12、CURLcode res;: 定义一个变量,用于保存CURL操作的返回值,用于检查操作是否成功。

13、CURL* curl = curl_easy_init();: 创建一个CURL句柄,用于执行CURL操作。

14、set_proxy(curl);: 设置代理信息。

15、curl_easy_setopt(curl, CURLOPT_URL, url);: 设置目标网页的URL。

16、curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);: 设置下载数据的处理函数。

17、curl_easy_setopt(curl, CURLOPT_WRITEDATA, save_path);: 设置下载数据保存的文件路径。

18、res = curl_easy_perform(curl);: 执行CURL操作,获取网页数据。

19、if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); }: 检查操作是否成功,如果不成功,打印错误信息。

20、curl_easy_cleanup(curl);: 释放CURL句柄。

上面就是详细的代码并且附上解释,对于前公司那帮技术还是有的看的,辛苦了三个通宵(因为白天有正事要做基本晚上加班熬夜搞出来),还是得到一些回报,介于此,我将我的代码分享出来,供大家一起来学习,如果有任何代码上的问题可以评论区留言讨论。

文章来源:https://blog.csdn.net/weixin_44617651/article/details/135101295
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。