
Anh Tuan
Data Science Expert
Geziyor 是一个现代的 Go Web 爬取框架,旨在提供强大的工具,以便高效地抓取网站和提取数据。与许多传统的爬取库不同,Geziyor 强调易用性,同时提供高度可定制的爬取工作流程。
要使用 Geziyor,请确保您已安装:
要安装 Geziyor,您可以运行:
go get -u github.com/geziyor/geziyor
以下是一个简单的示例,用于抓取网站并打印文章的标题:
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"github.com/PuerkitoBio/goquery"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://news.ycombinator.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
r.HTMLDoc.Find(".storylink").Each(func(i int, s *goquery.Selection) {
log.Println(s.Text())
})
},
}).Start()
}
有时,您需要模拟与服务器的更复杂交互,例如登录或与动态网站交互。在本示例中,我们将展示如何发送自定义标头和 POST 请求。
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
Method: "POST",
URL: "https://httpbin.org/post",
Body: []byte(`{"username": "test", "password": "123"}`),
Headers: map[string]string{
"Content-Type": "application/json",
},
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
您可能需要在爬取过程中管理 cookie 或维护会话。Geziyor 通过自动处理每个请求的 cookie 来简化 cookie 管理,您也可以在需要时自定义 cookie 处理过程。
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/cookies/set?name=value",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Cookies:", r.Cookies())
},
}).Start()
}
为了在避免 IP 限制或封锁的情况下抓取网站,您可以将请求通过代理路由。以下是如何使用 Geziyor 配置代理支持:
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
g.Do(&client.Request{
URL: "https://httpbin.org/ip",
Proxy: "http://username:password@proxyserver:8080",
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println(string(r.Body))
},
}).Start()
}
虽然 Geziyor 本身不解决验证码,但您可以将其与验证码求解服务(如 CapSolver)集成。以下是如何将 CapSolver 与 Geziyor 一起使用来解决验证码。
首先,您需要集成 CapSolver 并处理验证码挑战请求。
package main
import (
"encoding/json"
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
"log"
"time"
)
const CAPSOLVER_KEY = "YourKey"
func createTask(url, key string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"task": map[string]interface{}{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": url,
"websiteKey": key,
},
}
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/createTask").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
return result["taskId"].(string), nil
}
func getTaskResult(taskId string) (string, error) {
payload := map[string]interface{}{
"clientKey": CAPSOLVER_KEY,
"taskId": taskId,
}
for {
response, err := client.NewRequest().
Method("POST").
URL("https://api.capsolver.com/getTaskResult").
JSON(payload).
Do()
if err != nil {
return "", err
}
var result map[string]interface{}
json.Unmarshal(response.Body, &result)
if result["status"] == "ready" {
return result["solution"].(string), nil
}
time.Sleep(5 * time.Second)
}
}
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartRequestsFunc: func(g *geziyor.Geziyor) {
taskId, _ := createTask("https://example.com", "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf")
solution, _ := getTaskResult(taskId)
g.Do(&client.Request{
Method: "POST",
URL: "https://example.com/submit",
Body: []byte(`g-recaptcha-response=` + solution),
})
},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {
log.Println("Captcha Solved:", string(r.Body))
},
}).Start()
}
Geziyor 在处理大量爬取任务方面表现出色,但可以通过调整某些选项来进一步优化性能:
ConcurrentRequests 以允许多个并行请求。带有并发性和延迟的示例:
package main
import (
"github.com/geziyor/geziyor"
"github.com/geziyor/geziyor/client"
)
func main() {
geziyor.NewGeziyor(&geziyor.Options{
StartURLs: []string{"https://example.com"},
ParseFunc: func(g *geziyor.Geziyor, r *client.Response) {},
ConcurrentRequests: 10,
RequestDelay: 2,
}).Start()
}
在 CapSolver 获取顶级验证码解决方案的奖励代码:scrape。兑换后,每次充值后将获得额外的 5% 奖励,无限次。

Geziyor 是一个功能强大、快速且灵活的 Go Web 爬取框架,对于希望构建可扩展的爬取系统的开发人员来说,它是最佳选择。它内置的并发支持、可定制的请求以及与 CapSolver 等外部服务集成的能力,使其成为简单和高级爬取任务的理想工具。
无论您是从博客、电子商务网站收集数据,还是构建自定义爬取管道,Geziyor 都拥有您快速高效地入门所需的功能。
学习可扩展的Rust网络爬虫架构,包括reqwest、scraper、异步爬取、无头浏览器爬取、代理轮换以及符合规范的验证码处理。
