
Anh Tuan
Data Science Expert
Geziyor es un marco moderno de raspado web para Go, diseñado para ofrecer herramientas poderosas para raspar sitios web y extraer datos de manera eficiente. A diferencia de muchas bibliotecas de raspado tradicionales, Geziyor enfatiza la facilidad de uso al tiempo que proporciona flujos de trabajo de raspado altamente personalizables.
Para usar Geziyor, asegúrese de tener:
Para instalar Geziyor, puede ejecutar:
go get -u github.com/geziyor/geziyor
Aquí hay un ejemplo simple para raspar un sitio web e imprimir los títulos de los artículos:
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()
}
A veces, necesita simular una interacción más compleja con el servidor, como iniciar sesión o interactuar con sitios web dinámicos. En este ejemplo, mostraremos cómo enviar un encabezado personalizado y una solicitud 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()
}
Es posible que deba administrar cookies o mantener sesiones durante el raspado. Geziyor simplifica la administración de cookies al manejar automáticamente las cookies para cada solicitud, y también puede personalizar el proceso de manejo de cookies si es necesario.
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()
}
Para raspar un sitio web evitando restricciones o bloqueos de IP, puede enrutar sus solicitudes a través de un servidor proxy. Aquí se explica cómo configurar el soporte de proxy con 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()
}
Si bien Geziyor no resuelve captchas de forma nativa, puede integrarlo con un servicio de resolución de captchas como CapSolver. Así es como puede usar CapSolver para resolver captchas junto con Geziyor.
Primero, necesita integrar CapSolver y manejar las solicitudes de desafíos de captcha.
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 sobresale en el manejo de tareas de raspado de alto volumen, pero el rendimiento se puede optimizar aún más ajustando ciertas opciones:
ConcurrentRequests para permitir varias solicitudes paralelas.Ejemplo con concurrencia y retraso:
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()
}
Reclame su código de bonificación para las mejores soluciones de captcha en CapSolver: scrape. Después de canjearlo, obtendrá un bono adicional del 5% después de cada recarga, ilimitadas veces.

Geziyor es un marco de raspado web potente, rápido y flexible para Go, lo que lo convierte en una excelente opción para los desarrolladores que buscan crear sistemas de raspado escalables. Su soporte integrado para concurrencia, solicitudes personalizables y la capacidad de integrarse con servicios externos como CapSolver lo convierten en una herramienta ideal para tareas de raspado simples y avanzadas.
Ya sea que esté recopilando datos de blogs, sitios de comercio electrónico o creando canalizaciones de raspado personalizadas, Geziyor tiene las funciones que necesita para comenzar rápidamente y de manera eficiente.
¿Tu agente de IA está atascado en Cloudflare Turnstile? Aprende por qué los navegadores automatizados se bloquean y sigue un método de tres pasos para generar, inyectar y enviar un token válido de manera conforme.

Compara urllib3 vs. Requests para trabajo HTTP en Python. Aprende velocidad, control, reintentos, sesiones, ajuste para scraping y cuándo cada biblioteca es la mejor en la práctica.
