第一步
首先我们必须安装Go,下载和安装Go的说明。
我们为项目创建一个新文件夹,移动到该目录并执行以下命令:
go mod init scraper
? go mod init 命令用于在运行目录中初始化一个新的 Go 模块,并创建一个 go.mod 文件来跟踪代码依赖关系。依赖管理
现在让我们安装 Colibri:
go get github.com/gonzxlez/colibri
? Colibri 是一个 Go 包,它允许我们使用 JSON 中定义的一组规则来抓取和提取网络上的结构化数据。存储库
提取规则
我们定义了 colibri 用于提取我们需要的数据的规则。文档
我们将向 URL https://pkg.go.dev/search?q=xpath 发出 HTTP 请求,其中包含与 Go Packages 中 xpath 相关的 Go 包的查询结果。
使用网络浏览器中包含的开发工具,我们可以检查页面的 HTML 结构。浏览器开发工具有哪些?
<div class="SearchSnippet"> <div class="SearchSnippet-headerContainer"> <h2> <a href="/github.com/antchfx/xpath" data-gtmc="search result" data-gtmv="0" data-test-id="snippet-title"> xpath <span class="SearchSnippet-header-path">(github.com/antchfx/xpath)</span> </a> </h2> </div> <div class="SearchSnippet-infoLabel"> <a href="/github.com/antchfx/xpath?tab=importedby" aria-label="Go to Imported By"> <span class="go-textSubtle">Imported by </span><strong>143</strong> </a> <span class="go-textSubtle">|</span> <span class="go-textSubtle"> <strong>v1.2.5</strong> published on <span data-test-id="snippet-published"><strong>Oct 26, 2023</strong></span> </span> <span class="go-textSubtle">|</span> <span data-test-id="snippet-license"> <a href="/github.com/antchfx/xpath?tab=licenses" aria-label="Go to Licenses"> MIT </a> </span> </div> </div>
表示查询结果的 HTML 结构片段。
然后我们需要一个选择器“packages”,它将在 HTML 中查找类 SearchSnippet 类的所有 div 元素,从这些元素中选择一个选择器“ name” 将采用元素 h2 内元素 a 的文本和选择器“path” 将采用 中 a 元素的 href 属性的值h2 元素 。换句话说,“名称”将采用Go包的名称,“路径”将采用包的路径:)
{ "method": "GET", "url": "https://pkg.go.dev/search?q=xpath", "timeout": 10000, "selectors": { "packages": { "expr": "div.SearchSnippet", "all": true, "type": "css", "selectors": { "name": "//h2/a/text()", "path": "//h2/a/@href" } } } }
- method: 指定 HTTP 方法(GET、POST、PUT...)。
- url: 请求的 URL。
- 超时: HTTP 请求的超时(以毫秒为单位)。
-
选择器:选择器。
-
“packages”: 是选择器的名称。
- expr: 选择器表达式。
- all: 指定应找到与表达式匹配的所有元素。
- type: 表达式的类型,在本例中为 CSS 选择器。
-
选择器:嵌套选择器。
- “name” 和 “path” 是选择器的名称,它们的值是表达式,在本例中是 XPath 表达式。
-
“packages”: 是选择器的名称。
Go 中的代码
我们准备创建 scraper.go 文件,导入必要的包并定义主函数:
package main import ( "encoding/json" "fmt" "github.com/gonzxlez/colibri" "github.com/gonzxlez/colibri/webextractor" ) var rawRules = `{ "method": "GET", "url": "https://pkg.go.dev/search?q=xpath", "timeout": 10000, "selectors": { "packages": { "expr": "div.SearchSnippet", "all": true, "type": "css", "selectors": { "name": "//h2/a/text()", "path": "//h2/a/@href" } } } }` func main() { we, err := webextractor.New() if err != nil { panic(err) } var rules colibri.Rules err = json.Unmarshal([]byte(rawRules), &rules) if err != nil { panic(err) } output, err := we.Extract(&rules) if err != nil { panic(err) } fmt.Println("URL:", output.Response.URL()) fmt.Println("Status code:", output.Response.StatusCode()) fmt.Println("Content-Type", output.Response.Header().Get("Content-Type")) fmt.Println("Data:", output.Data) }
? WebExtractor 是 Colibri 的默认接口,可以开始在网络上抓取或提取数据。
使用 webextractor 的新功能,我们生成一个 Colibri 结构,其中包含开始提取数据所需的内容。
然后我们将 JSON 格式的规则转换为 Rules 结构,并调用 Extract 方法将规则作为参数发送。
我们获得输出,HTTP 响应的 URL、HTTP 状态代码、响应的内容类型以及使用选择器提取的数据都打印在屏幕上。请参阅输出结构的文档。
我们执行以下命令:
go mod tidy
? go mod tidy 命令确保 go.mod 中的依赖项与模块源代码匹配。
最后,我们使用以下命令在 Go 中编译并运行代码:
go run scraper.go
结论
在这篇文章中,我们学习了如何使用 Colibri 包在 Go 中执行网页抓取,使用 CSS 和 XPath 选择器定义提取规则。 Colibri 是为那些希望在 Go 中自动化 Web 数据收集的人提供的工具。其基于规则的方法和易用性使其成为所有经验水平的开发人员的一个有吸引力的选择。
简而言之,Go 中的网页抓取是一种强大且多功能的技术,可用于从各种网站中提取信息。需要强调的是,网页抓取必须符合道德规范,尊重网站的条款和条件,并避免服务器超载。
以上是网页抓取的详细内容。更多信息请关注PHP中文网其他相关文章!

本文解释了GO的软件包导入机制:命名imports(例如导入“ fmt”)和空白导入(例如导入_ fmt; fmt;)。 命名导入使包装内容可访问,而空白导入仅执行t

本文解释了Beego的NewFlash()函数,用于Web应用程序中的页间数据传输。 它专注于使用newflash()在控制器之间显示临时消息(成功,错误,警告),并利用会话机制。 Lima

本文详细介绍了MySQL查询结果的有效转换为GO结构切片。 它强调使用数据库/SQL的扫描方法来最佳性能,避免手动解析。 使用DB标签和Robus的结构现场映射的最佳实践

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文详细介绍了在GO中详细介绍有效的文件,将OS.WriteFile(适用于小文件)与OS.openfile和缓冲写入(最佳大型文件)进行比较。 它强调了使用延迟并检查特定错误的可靠错误处理。

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境