Le scraping de sites Web entraîne souvent des blocages en raison de l'utilisation d'agents utilisateurs standards ou inappropriés. Cet article présente une méthode simple pour atténuer ce problème en utilisant de faux agents utilisateurs randomisés dans vos scrapers Go Colly.
Comprendre les faux agents utilisateurs
Les agents utilisateurs sont des chaînes identifiant le client effectuant une requête Web. Ils transmettent des informations sur l'application, le système d'exploitation (Windows, macOS, Linux) et le navigateur (Chrome, Firefox, Safari). Les sites Web utilisent ces informations à diverses fins, notamment pour la sécurité et l'analyse.
Une chaîne d'agent utilisateur typique pourrait ressembler à ceci (Chrome sur Android) :
<code>'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36'</code>
L'agent utilisateur par défaut de Go Colly :
<code>"User-Agent": "colly - //m.sbmmt.com/link/953bd83cb0b9c9f9dc4b3ba0bfc1b236",</code>
identifie facilement votre grattoir, augmentant ainsi le risque d'être bloqué. Par conséquent, il est crucial d’employer un agent utilisateur personnalisé et randomisé.
Implémentation d'un faux agent utilisateur avec Go Colly
La modification des en-têtes de requête pour inclure un agent utilisateur personnalisé est réalisée à l'aide du rappel OnRequest()
. Cela garantit que chaque requête utilise une chaîne d'agent utilisateur différente.
<code class="language-go">package main import ( "bytes" "log" "github.com/gocolly/colly" ) func main() { c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", "Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148") }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
Cela définit un seul agent utilisateur pour toutes les demandes. Pour un grattage plus robuste, utilisez une approche aléatoire.
Rotation via des agents utilisateurs aléatoires
Le package github.com/lib4u/fake-useragent
simplifie la sélection aléatoire des agents utilisateurs.
<code class="language-go">package main import ( "bytes" "fmt" "log" "github.com/gocolly/colly" uaFake "github.com/lib4u/fake-useragent" ) func main() { ua, err := uaFake.New() if err != nil { fmt.Println(err) } c := colly.NewCollector(colly.AllowURLRevisit()) c.OnRequest(func(r *colly.Request) { r.Headers.Set("User-Agent", ua.Filter().GetRandom()) }) c.OnResponse(func(r *colly.Response) { log.Printf("%s\n", bytes.Replace(r.Body, []byte("\n"), nil, -1)) }) for i := 0; i < 5; i++ { c.Visit("httpbin.org/headers") } }</code>
Cet extrait de code récupère un agent utilisateur aléatoire pour chaque requête.
Utilisation de faux agents utilisateurs spécifiques
github.com/lib4u/fake-useragent
fournit des options de filtrage. Par exemple, pour utiliser un agent utilisateur Chrome aléatoire sur un ordinateur de bureau :
<code class="language-go">r.Headers.Set("User-Agent", ua.Filter().Chrome().Platform(uaFake.Desktop).Get())</code>
N'oubliez pas de toujours respecter les robots.txt
et les conditions d'utilisation d'un site Web lors du scraping. L’utilisation d’agents utilisateurs aléatoires est une technique parmi tant d’autres pour un web scraping responsable ; envisagez également d'utiliser des proxys et d'autres stratégies de gestion d'en-tête.
Références :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!