当前位置: 首页 > news >正文

Go编程:使用 Colly 库下载Reddit网站的图像

亿牛云

概述

Reddit是一个社交新闻网站,用户可以发布各种主题的内容,包括图片。本文将介绍如何使用Go语言和Colly库编写一个简单的爬虫程序,从Reddit网站上下载指定主题的图片,并保存到本地文件夹中。为了避免被目标网站反爬,我们还将使用亿牛云爬虫代理服务,通过动态切换代理IP来提高爬取效率和稳定性。

正文

Colly库简介

Colly是一个用Go语言编写的功能强大的爬虫框架。它提供了简洁的API,拥有强劲的性能,可以自动处理cookie和session,还有提供灵活的扩展机制。Colly支持多种数据格式的解析,如HTML、XML、JSON等,还支持分布式爬取、限速、缓存、重试等功能。

亿牛云爬虫代理简介

亿牛云爬虫代理是一种专业的代理服务,通过固定云代理服务地址,建立专线网络链接,代理平台自动实现海量IP池管理及负载均衡,实时无感的毫秒级代理IP切换,提供企业级云服务的网络稳定性及请求响应速度,同时降低了客户端运算负载压力,避免了爬虫客户在代理IP策略优化上投入精力,整体提升了爬虫效率。

爬虫程序设计

我们的爬虫程序主要分为以下几个步骤:

  • 创建一个Colly实例,并设置相关选项和回调函数
  • 登录亿牛云后台,获取代理相关信息(域名、端口、用户名、密码),并设置到Colly实例中
  • 访问Reddit网站,根据指定的主题(subreddit)和过滤条件(filter),获取图片链接
  • 下载图片,并保存到本地文件夹中

爬虫程序代码

package mainimport ("fmt""io""log""net/http""net/url""os""path/filepath""strings""github.com/gocolly/colly/v2"
)// 定义常量
const (subreddit = "pics" // 主题filter    = "top"  // 过滤条件limit     = 10     // 图片数量限制output    = "images" // 输出文件夹// 亿牛云爬虫代理相关信息(需登录后台获取)proxyHost = "www.16yun.cn" // 域名proxyPort = 6443           // 端口proxyUser = "16YUN"        // 用户名proxyPass = "16IP"         // 密码
)func main() {// 创建一个Colly实例c := colly.NewCollector(colly.AllowedDomains("www.reddit.com", "old.reddit.com", "i.redd.it", "i.imgur.com"),)// 设置代理(使用亿牛云爬虫代理服务)err := c.SetProxyFunc(func(r *http.Request) (*url.URL, error) {return url.Parse(fmt.Sprintf("http://%s:%s@%s:%d", proxyUser, proxyPass, proxyHost, proxyPort))})if err != nil {log.Fatal(err)}// 创建一个计数器,用于限制图片数量count := 0// 注册HTML回调函数,用于解析图片链接c.OnHTML("a[href]", func(e *colly.HTMLElement) {// 获取链接地址link := e.Attr("href")// 过滤非图片链接if !strings.HasSuffix(link, ".jpg") && !strings.HasSuffix(link, ".png") {return}// 限制图片数量if count >= limit {return}// 访问图片链接c.Visit(link)})// 注册图片回调函数,用于下载图片c.OnResponse(func(r *colly.Response) {// 获取图片URLurl := r.Request.URL.String()// 获取图片文件名filename := filepath.Base(url)// 创建输出文件夹(如果不存在)if _, err := os.Stat(output); os.IsNotExist(err) {os.Mkdir(output, 0755)}// 创建图片文件file, err := os.Create(filepath.Join(output, filename))if err != nil {log.Fatal(err)}defer file.Close()// 写入图片数据file.Write(r.Body)fmt.Printf("下载图片:%s\n", url)count++})c.OnError(func(r *colly.Response, err error) {fmt.Printf("请求失败:%s\n", r.Request.URL)fmt.Println(err)})c.OnRequest(func(r *colly.Request) {fmt.Printf("请求开始:%s\n", r.URL)})c.OnResponse(func(r *colly.Response) {fmt.Printf("请求完成:%s\n", r.Request.URL)})c.OnScraped(func(r *colly.Response) {fmt.Println("爬取结束")})fmt.Println("爬取开始")c.Visit(fmt.Sprintf("https://old.reddit.com/r/%s/%s/", subreddit, filter))
}

结语

本文介绍了如何使用Go语言和Colly库编写一个简单的爬虫程序,从Reddit网站上下载指定主题的图片,并保存到本地文件夹中。同时,我们还使用了亿牛云爬虫代理服务,通过动态切换代理IP来提高爬取效率和稳定性,希望本文对你有所帮助。

相关文章:

Go编程:使用 Colly 库下载Reddit网站的图像

概述 Reddit是一个社交新闻网站,用户可以发布各种主题的内容,包括图片。本文将介绍如何使用Go语言和Colly库编写一个简单的爬虫程序,从Reddit网站上下载指定主题的图片,并保存到本地文件夹中。为了避免被目标网站反爬&#xff0c…...

高性能日志脱敏组件:已支持 log4j2 和 logback 插件

项目介绍 日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。 sensitive提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。 同时支持 logback 和 log4j2 等常见的日志脱敏…...

一文读懂PostgreSQL中的索引

前言 索引是加速搜索引擎检索数据的一种特殊表查询。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录…...

windows的批量解锁

场景 场景是我从github上拉了一个c#项目启动的时候报错, 1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(3327,5): error MSB3821: 无法处理文件 UI\Forms\frmScriptBuilder.…...

Nginx配置微服务避免actuator暴露

微服务一般在扫漏洞的情况下,需要屏蔽actuator健康检查 # 避免actuator暴露 if ($request_uri ~ "/actuator") { return 403; }...

GEE——在GEE中计算地形位置指数TPI

简介: DEM中的TPI计算是指通过计算每个像元高程与其邻域高程的差值来计算地形位置指数(Topographic Position Index)。TPI 是描述地形起伏度和地形形态的一个重要指标,可以用于地貌分类、土壤侵蚀、植被分布等领域。 地形位置指数(Topographic Position Index,TPI)是用…...

树的基本操作(数据结构)

树的创建 //结构结点 typedef struct Node {int data;struct Node *leftchild;struct Node *rightchild; }*Bitree,BitNode;//初始化树 void Create(Bitree &T) {int d;printf("输入结点(按0为空结点):");scanf("%d",&d);if(d!0){T (Bitree)ma…...

Python复刻游戏《贪吃蛇大作战》

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 曾经有一款小游戏刷屏微信朋友圈,叫做《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了,还上…...

SpringCloud之Gateway整合Sentinel服务降级和限流

1.下载Sentinel.jar可以图形界面配置限流和降级规则 地址:可能需要翻墙 下载jar文件 2.引入maven依赖 <!-- spring cloud gateway整合sentinel的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-s…...

深度学习——深度卷积神经网络(AlexNet)

深度学习——深度卷积神经网络&#xff08;AlexNet) 文章目录 前言一、学习表征二、AlexNet实现2.1. 模型设计2.2. 激活函数2.3. 容量控制与预处理2.4. 训练模型 总结 前言 在前面学习了卷积神经网络的基本原理&#xff0c;之后将继续学习现代卷积神经网络架构。而本章将学习其…...

提高编程效率-Vscode实用指南

您是否知道全球73%的开发人员依赖同一个代码编辑器&#xff1f; 是的&#xff0c;2023 年 Stack Overflow 开发者调查结果已出炉&#xff0c;Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE&#xff0c;与专业…...

ES 数据库

ES 数据库 通过 API 查询通过 JSON 查询 熟悉 es 的同学都知道 es 一般有两种查询方式 1&#xff0c;在 java 中构建查询对象&#xff0c;调用 es 提供的 api 做查询 2&#xff0c;使用 json 调用接口做查询 查询语句无非是将足够的信息丢给数据库&#xff0c;但是它却和 SQL …...

面试经典150题——Day14

文章目录 一、题目二、题解 一、题目 134. Gas Station There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith stati…...

Pika v3.5.1发布!

Pika 社区很高兴宣布&#xff0c;我们今天发布已经过我们生产环境验证 v3.5.1 版本&#xff0c;https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.1 。 该版本不仅做了很多优化工作&#xff0c;还引入了多项新功能。这些新功能包括 动态关闭 WAL、ReplicationID…...

Kotlin中的数组

数组是一种常见的数据结构&#xff0c;用于存储相同类型的多个元素。在 Kotlin 中&#xff0c;我们可以使用不同的方式声明、初始化和操作数组。 在 Kotlin 中&#xff0c;有多种方式可以定义和操作数组。我们将通过以下示例代码来展示不同的数组操作&#xff1a; fun main()…...

(3) OpenCV图像处理kNN近邻算法-识别摄像头数字

目录 一、代码简介 二、程序代码 三、使用的图片资源 1、图片digits.png...

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指、创业板指均跌超1%&#xff0c;双双创出年内新低。转基因概念股逆势大涨…...

abap中程序跳转(全)

1.常用 1.CALL TRANSACTION 1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN]. 其中ta为事务码tcode使用时要打单引号() 2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK USING bdc_tab { {[MODE mode] [UPDATE u…...

启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析

作者&#xff1a;华钟明 文章摘要&#xff1a; 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分&#xff1a; -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…...

PCB命名规则-allegro

PCB命名规则-allegro 一、焊盘命名规则 1、 贴片矩形焊盘 命名规则&#xff1a;SMD长&#xff08;L&#xff09;宽&#xff08;W&#xff09;&#xff08;mil&#xff09; 举例&#xff1a;SMD90X60 2、 贴片圆焊盘 命名规则&#xff1a;SMDC焊盘直径&#xff08;D&…...

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工

目录 前言&#xff1a; - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…...

探索数字时代的核心:服务器如何塑造未来并助你成就大业

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

spring6-资源操作:Resources

资源操作&#xff1a;Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…...

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区&#xff0c;分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配&#xff1a;编译时分配&#xff0c;包括全局、静态全局、静态局部三种变量。 动态内存分配&#xff1a;运行时分配&#xff0c;包括栈&#x…...

Java设计模式之备忘录模式

备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许在不暴露对象内部状态的情况下捕获和恢复对象的内部状态。该模式通过在对象之外保存和恢复对象的状态&#xff0c;使得对象可以在需要时回滚到之前的状态。 在备忘录模式中&#xff…...

深度学习 | Pytorch深度学习实践

一、overview 基于pytorch的深度学习的四个步骤基本如下&#xff1a; 二、线性模型 Linear Model 基本概念 数据集分为测试集和训练集&#xff08;训练集、开发集&#xff09;训练集&#xff08;x&#xff0c;y&#xff09;测试集只给&#xff08;x&#xff09;过拟合&#xf…...

Elasticsearch7.9.3保姆级安装教程

Linux版本Elasticsearch版本(待安装)Kibana版本(待安装)CentOS 77.9.37.9.3 一、下载地址 1、官网下载 打开地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch&#xff0c;按如图所示选择对应版本即可 2、采用wget下载 为了不必要的麻烦&#xff0c;建…...

深入使用探讨 PuppeteerSharp 抓取 LinkedIn 页面的步骤

LinkedIn是全球最大的职业社交平台之一&#xff0c;拥有大量的用户和企业信息。用户可以在上面建立个人职业资料、与其他用户建立联系、分享职业经验和获取行业动态。由于其庞大的用户群体和丰富的数据资源&#xff0c;开发者们对于获取LinkedIn数据的需求日益增长。 Puppeteer…...

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候&#xff0c;就要对 齐到最大对齐数…...

从零开始:GitFlow详细教程,轻松掌握分支策略

前序 GitFlow是一种用于管理Git仓库中软件开发工作流程的模型&#xff0c;它提供了一种结构化的方法来处理特性开发、版本发布和维护。下面是一个详细的GitFlow教程&#xff0c;帮助你了解GitFlow的基本概念和使用方法。 安装GitFlow 首先&#xff0c;确保你已经安装了Git。…...

公司网站如何做百度收录/搭建网站的软件

Centos7安装Python3的方法由于centos7原本就安装了Python2&#xff0c;而且这个Python2不能被删除&#xff0c;因为有很多系统命令&#xff0c;比如yum都要用到。输入Python命令&#xff0c;查看可以得知是Python2.6.6版本[rootxxx]# pythonPython 2.6.6 (r266:84292, Aug 18 2…...

网站做推广需要什么条件/扶贫832网络销售平台

我的移动开发春季历程 没有稳定的工作&#xff0c;只有稳定的能力。 春天&#xff0c;又到了万物复苏的季节&#xff0c;在程序猿这个行当里&#xff0c;作为 Android 开发出生的我&#xff0c;在经历了5年的脱发生涯后&#xff0c;现在更多的是称呼自己为移动开发攻城狮。 学…...

深圳市网站建设公司好不好/营销型网站分为哪几种

face recognition 项目实际使用 最近在一个公众号上看到一个推荐的github上的项目&#xff0c;号称是最简单&#xff0c;最容易上手的人脸识别项目&#xff0c;折腾了两天才算把这个模块装好&#xff0c;其实大部分时间都花在了安装各种依赖包上&#xff0c;cmake&#xff0c;…...

东莞智通人才网官网首页/seo关键字排名

10月27日消息&#xff0c;据路透社报道&#xff0c;富士通公司周四证实&#xff0c;正在与联想商谈在设计和制造PC上进行合作&#xff0c;不过表示将保留自己的PC品牌。此声明的发布&#xff0c;正值日益复杂的智能手机和平板电脑侵蚀PC市场之时&#xff0c;而全球PC销售早在5年…...

做网站封面要怎么做/今日广东头条新闻

DoNews 4月8日消息(记者 向密) 网易有道词典推出全新功能——AI作文批改&#xff0c;通过人工智能技术自动批改英语作文。据悉&#xff0c;有道AI作文批改基于网易有道神经网络机器翻译&#xff0c;使用Transformer架构等核心技术&#xff0c;建立复杂模型实现针对不同场景进行…...

淘宝网站建设维护会计科目/seo整站怎么优化

作者&#xff1a;张华 发表于&#xff1a;2015-12-29版权声明&#xff1a;能够随意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )环境搭建外部物理路由器能够通过配置bridge_mappings參数&#xff0c;另外…...