网页抓取
第一步
首先我们必须安装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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

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

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

Golang适合快速开发和并发场景,C 适用于需要极致性能和低级控制的场景。1)Golang通过垃圾回收和并发机制提升性能,适合高并发Web服务开发。2)C 通过手动内存管理和编译器优化达到极致性能,适用于嵌入式系统开发。

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

C 更适合需要直接控制硬件资源和高性能优化的场景,而Golang更适合需要快速开发和高并发处理的场景。1.C 的优势在于其接近硬件的特性和高度的优化能力,适合游戏开发等高性能需求。2.Golang的优势在于其简洁的语法和天然的并发支持,适合高并发服务开发。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。 Golang以其并发模型和高效性能着称,Python则以简洁语法和丰富库生态系统着称。

Golang和C 在性能上的差异主要体现在内存管理、编译优化和运行时效率等方面。1)Golang的垃圾回收机制方便但可能影响性能,2)C 的手动内存管理和编译器优化在递归计算中表现更为高效。
