Go 优雅的爬虫框架 - Colly

news2024/10/5 20:12:07

Colly 是一款用 Go 语言编写的优雅网络爬虫框架,速度快、灵活且易于使用

关键特性包括:

  • 线程安全。
  • 用户友好的 API。
  • 支持 XHR(Ajax)和 WebSocket。
  • 缓存和持久化。
  • 支持速度限制和分布式爬取。
  • 强大的可扩展性。

colly采集器配置

  • AllowedDomains: 设置收集器使用的域白名单,设置后不在白名单内链接,报错:Forbidden domain。
  • AllowURLRevisit: 设置收集器允许对同一 URL 进行多次下载。
  • Async: 设置收集器为异步请求,需很Wait()配合使用。
  • Debugger: 开启Debug,开启后会打印请求日志。
  • MaxDepth: 设置爬取页面的深度。
  • UserAgent: 设置收集器使用的用户代理。
  • MaxBodySize : 以字节为单位设置检索到的响应正文的限制。
  • IgnoreRobotsTxt: 忽略目标机器中的robots.txt声明。 

创建采集器:配置可以写在里面,也可以写在外面。

collector := colly.NewCollector(
	colly.AllowedDomains("www.baidu.com",".baidu.com"),//白名单域名
	colly.AllowURLRevisit(),//允许对同一 URL 进行多次下载
	colly.Async(true),//设置为异步请求
	colly.Debugger(&debug.LogDebugger{}),// 开启debug
	colly.MaxDepth(2),//爬取页面深度,最多为两层
	colly.MaxBodySize(1024 * 1024),//响应正文最大字节数
	colly.UserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "),
	colly.IgnoreRobotsTxt(),//忽略目标机器中的`robots.txt`声明
)

1、安装

go get -u github.com/gocolly/colly

2、案例

案例一:爬取网络页面标题 

package main

import (
	"fmt"
	"github.com/gocolly/colly"
)

func main() {
	// 创建Collector实例
	c := colly.NewCollector()
	// 设置请求处理逻辑
	c.OnHTML("head > title", func(e *colly.HTMLElement) {
		fmt.Println("网页标题:", e.Text)
	})
	// 设置错误处理逻辑
	c.OnError(func(r *colly.Response, err error) {
		fmt.Println("请求错误:", err)
	})
	// 开始爬取
	c.Visit("http://www.baidu.com")
}

案例二:爬取其他元素内容 

package main

import (
	"fmt"
	"github.com/gocolly/colly"
)

func main() {
	// 创建Collector实例
	c := colly.NewCollector()
	// 设置请求处理逻辑,第一个参数是查询选择器,类似CSS选择器一样的语法
	c.OnHTML("body > div#wrapper > div#head > div#s-top-left > a", func(e *colly.HTMLElement) {
		// 打印出每个新闻标题链接的文本和它的 href 属性
		fmt.Println("栏目:", e.Text)
		fmt.Println("链接地址:", e.Attr("href"))
	})
	// 设置错误处理逻辑
	c.OnError(func(r *colly.Response, err error) {
		fmt.Println("请求错误:", err)
	})
	// 开始爬取
	c.Visit("http://www.baidu.com")
}

案例三:爬取图片 


                

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

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

相关文章

rtl8723DU移植 android4.4 4418

一、 linux 的移植。 首先编译一遍确保没有问题。 将驱动拷贝到 driver/net/wireless 目录下。 使用的是: 改写 makefile Kconfig 去改写 8723 的makefile 设置menuconfig 使能固有的 库。 使能USB部分 ieee 部分 编译一遍 有报错。 解决: …

NPDP(New Product Development Professional)

NPDP(New Product Development Professional) NPDP考试介绍 NPDP证书介绍

这款信创FTP软件,可实现安全稳定的文件传输

信创,即信息技术应用创新,2018年以来,受“华为、中兴事件”影响,国家将信创产业纳入国家战略,并提出了“28n”发展体系。“8”具体指金融、石油、电力、电信、交通、航空航天、医院、教育等主要行业。目前企业使用比较…

四川汇聚荣聚荣科技有限公司在市场评价好吗?

随着科技行业的迅猛发展,越来越多的科技公司如雨后春笋般涌现,其中不乏一些优秀的企业。四川汇聚荣聚荣科技有限公司便是其中的一员。那么,这家公司在市场上的评价如何呢?接下来,我们将从四个方面进行详细的阐述。 一、公司概况四…

Sapphire开发日志(三)

任务描述 本周实现并封装了模型的运行,需要在前端安装依赖的库,编写对应的处理函数。同时需要能够展示出抠图效果。 依赖与环境配置 尝试在前端接入并运行onnx。 在前端运行onnx依赖于onnxruntime-web这个包,这个包可以在浏览器进行模型推…

Gartner发布电信运营商应对持续变化的网络安全环境指南:现代云安全与网络安全的五大核心挑战

所有组织的云和网络都面临着高级威胁。作为网络安全的关键参与者,电信运营商的 CIO 需要了解行业面临的挑战,并了解应采用哪些解决方案来实现方法的现代化。 主要发现 电信运营商 (CSP) CIO 如果不能调整其安全策略来保护其环境,那么他们将会…

python在cmd中运行.exe文件时报错:不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

添加系统环境变量: 设置环境变量,在用户变量里面添加 【PATH:%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Windows\SysWOW64】 在系统变量里面添加,【变量名:ComSpec】 【变量值:%SystemRoo…

动态添加xxljob任务-xxljob源码改造

在实际开发中,很多时候需要在代码中动态添加和执行xxljob的任务,那么原来的xxljob任务调度平台不能完成这项需求,就需要对源码进行改造。 1. 分析源码 1.1 请求路径 在任务调度平台新建一个任务,保存,查看发送的请求…

Blink基准测试:挑战多模态大型语言模型的视觉感知能力

随着人工智能技术的飞速发展,多模态大型语言模型(LLMs)在理解和生成文本方面取得了显著成就。然而,这些模型在核心视觉感知任务上的表现仍远落后于人类。本文介绍了Blink基准测试,这是一套针对多模态LLMs的视觉感知能力…

Leetcode:寻找两个正序数组的中位数

题目链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 题目分析 1、当只有一个有序数组时,该数组的中位数会将该数组分为两份:左子数组 和 右子数组 2、当有两个有序数组时, 我们仍然可以通过一条分隔…

第5章 锁与进程间通信(3)

目录 5.4 其他IPC机制 5.4.1 信号 5.4.2 管道和套接字 5.5 小结 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 5.4 其他IPC机制 5.4.1 信号 kill命令: 作用:发送指定信号。 信号分为: 传统32个信号。 用于实…

【机器学习】Samba-CoE实现高效推理部署

Samba-CoE:突破AI内存墙,实现高效推理部署 一、引言二、Samba-CoE系统概述三、突破AI内存墙的关键技术流数据流三层内存系统 四、Samba-CoE的推理部署与优化动态模型切换资源优化分配性能加速 五、代码实例与实现细节六、结语 一、引言 随着人工智能技术…

es的总结

es的collapse es的collapse只能针对一个字段聚合(针对大数据量去重),如果以age为聚合字段,则会展示第一条数据,如果需要展示多个字段,需要创建新的字段,如下 POST testleh/_update_by_query {…

2024-05-31 blue-VH-driver-问题分析-有状态的服务-状态的处理

摘要: VH的driver对上层提供的接口,是会保持状态。这个状态,可以分为,查询的数据的状态,主要是为了提供翻页查询的功能。另一种状态,就是订阅。 有状态的服务: 状态是什么? 其实从调用方的角度更好的理解&#xff0c…

AIGC绘画设计——Stable Diffusion进阶使用

本文讲解,模型底模,VAE美化模型,Lora模型,hypernetwork。 文本Stable Diffusion 简称sd 欢迎关注留言,不定期追加更新! 使用模型 C站:https://civitai.com/ huggingface&#…

快团团大团长帮卖团长团长如何获得物流查询码?

一、功能说明 团长可自行生成物流查询码,直接将码发给顾客,顾客扫码可查询自己订单的物流状态! 用户扫码后,会出现用户在该团长处下单的所有快递订单。团员可查看该订单物流信息、进行退款申请,或直接联系团长。 二…

使用Python爬取华为市场游戏类APP应用

文章目录 1. 写在前面2. 接口分析3. 爬虫开发4. 下载链接获取 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守…

摘下戛纳大奖的《狗阵》,救得了华谊吗?

随着第77届戛纳国际电影节成功落幕,《狗阵》无疑成为了华语电影的最大赢家。 今年的戛纳电影节可以说是华语电影大年,《风流一代》《狗阵》《酱园弄》《九龙城寨之围城》等多部重量级影片亮相戛纳。 但最终抱得奖项而归的只有管虎导演的《狗阵》&#…

长虹55D3P海思平台固件破解

一 、背景 目前网上还没有长虹海思平台智能电视的固件打包解包教程,仅有一个znds的解包,但大佬迟迟没更新打包教程和工具。帖子中也没讲解解包的原理,对于不熟悉海思平台的来说,感觉无从下手。 znds海思解包贴:#长虹…

Vue 2.0使用Vue-count-to给数字添加增长动画

在开发后台管理系统时,时常会遇到数据汇总,为了页面展示更生动,用户体验更好,通常会对汇总的数字加一个逐步递增动画。 实现这个效果一般是用的 Vue-count-to这个插件,这是一款简单好用的一个数字滚动插件,…