
Erstens: Warum müssen Sie Go verwenden, um Crawler zu bekommen?
Neun von zehn Leuten, die heutzutage mit Crawlern arbeiten, benutzen Python, aber alte Hasen wissen, dass Go für diese Aufgabe geboren wurde. Sehen Sie sich das an.gleichzeitigDie Go net/http-Bibliothek ist eine großartige Möglichkeit, das Beste aus Ihrer Sprache herauszuholen, mit hunderten von Threads und weniger Speicher. Besonders wenn Sie viele Anfragen stellen müssen, sind die net/http-Bibliotheken von Go eine großartige Möglichkeit, andere Sprachen loszuwerden.
Es gibt jedoch einen Fallstrick, den man beachten sollte: Viele Websites sind jetztBlockierung von IP-AdressenDas erste, was Sie tun müssen, ist, eine 403 forbidden zu erhalten. Sie haben einen halben Tag lang Code geschrieben, und dann bekommen Sie nach nur zehn Minuten Laufzeit eine 403 forbidden, das ist etwas, was jedem auf den Geist gehen wird. Hier kommt unsere Geheimwaffe, der IP-Proxy-Dienst von ipipgo, ins Spiel.
// Das Einrichten eines Proxys mit Go ist zum Beispiel so einfach wie folgt
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(&url.URL{
Schema: "http",
Host: "your-account:password@proxy.ipipgo.io:9021",
}),
},
Timeout: 30 time.
Sekunde, }
Zweitens: Wie wurde die Proxy-IP zu einem Lebensretter?
Kürzlich habe ich einem Freund geholfen, einen Preisvergleichs-Crawler zu bekommen, und die Zielseite ist so streng in Anti-Climbing, dass es mich umbringt. Zunächst habe ich die lokale IP hart nur, das Ergebnis ist eine halbe Stunde blockiert werden. Später geändert, um ipipgo dynamische Wohn-Proxy, guter Kerl, lief für zwei aufeinanderfolgende Tage sind in Ordnung.
| Agent Typ | Erfolgsquote | Tempo |
|---|---|---|
| Agenten für Rechenzentren | 85% | scharf (von Messern oder Verstand) |
| Wohnungsvermittler (empfohlen) | 98% | mittel |
Der Proxy-Pool von ipipgo ist groß genug, vor allem mit ihrenIntelligente RoutenverknüpfungFunktion, wählen Sie automatisch den schnellsten Knoten für Sie. Ich erinnere mich an das letzte Mal habe ich E-Commerce-Datenerfassung, mit ihrer API alle 5 Minuten, um die IP zu ändern, die Daten gegriffen, dass eine glatte genannt.
Drittens, Hand, um Sie zu lehren, den Agenten zu entsprechen
Hier ist ein Trick für Neulinge, verwenden Sie nicht direkt die Standard-http.Get, mit einem Client-Instanz ist der richtige Weg. Der folgende Code kopieren Sie direkt Hausaufgaben auf der Linie:
func createProxyClient(proxyURL string) (http.Client, error) {
proxy, err := url.Parse(proxyURL)
if err ! = nil {
return nil, err
}
return &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(proxy),
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // Zertifikatsüberprüfung überspringen
}, // Überspringen Sie die Zertifikatsüberprüfung.
Timeout: 20 time.
Sekunde, }, nil
}
Denken Sie daran, die proxyURL durch die Adresse zu ersetzen, die Sie von ipipgo erhalten haben, und zwar im Formathttp://用户名:密码@GatewayAdresse:AnschlussWenn Sie ein Problem mit dem Zertifikat haben, können Sie es wie oben beschrieben vorübergehend auslassen. Wenn Sie ein Problem mit dem Zertifikat haben, können Sie die Validierung wie oben beschrieben vorübergehend auslassen, aber es ist besser, ein korrektes Zertifikat für die offizielle Umgebung zu haben.
IV. Aufzeichnung der tatsächlichen Fallstricke
Das letzte Mal, als ich mit Go auf eine Reise-Website ging, war der Proxy korrekt eingestellt, aber ich konnte keine Verbindung herstellen. Später fand ich heraus, dass es anVerbindungspoolDie Verbindung war nicht richtig gekoppelt, und das standardmäßige Keep-Alive-Verfahren beanspruchte die Verbindung. Die Abhilfe bestand darin, zwei Zeilen zu Transport hinzuzufügen:
Transport: &http.Transport{
MaxIdleConns: 100,
IdleConnTimeout: 90 Zeit.
TLSHandshakeTimeout: 10 time.
Sekunde, TLSHandshakeTimeout: 10 time.Second, }
Es gibt auch eine mehr böse, mit ipipgo Proxy-Zugang ist immer Timeout. Später stellte sich heraus, dass die Standard-Knoten ihrer Heimat ist das HTTP-Protokoll, die Ziel-Site ist gezwungen, HTTPS. ändern, um HTTPS-Proxy-Paket sofort gelöst.
V. Häufig gestellte Fragen QA
F: Was soll ich tun, wenn ich mich nicht immer mit der Proxy-IP verbinden kann?
A: Prüfen Sie zunächst, ob das Passwort des Kontos nicht richtig ist, insbesondere die Sonderzeichen, die Sie im URL-Code verwenden. Dann versuchen Sie, direkt mit dem curl-Befehl zu testen. Wenn es nicht funktioniert, wenden Sie sich schnell an den ipipgo-Kundendienst, um den Knoten zu ändern.
F: Was hat es mit dem Kriechen auf sich, das plötzlich blockiert wird?
A: 80 % der Anforderungshäufigkeit ist zu hoch, auch wenn die IP-Änderung den Rhythmus kontrollieren muss. Vorgeschlagen, im Code eine zufällige Verzögerung hinzuzufügen, mit time.Sleep mit rand.Intn, um etwas Zufälligkeit zu erhalten.
F: Inwiefern ist ipipgo besser als andere?
A: Abgesehen davon sind zwei Dinge schwer genug: aReal Life Gehäuse IP, Pseudo-Grad ziehen voll; zweitens, die ausschließliche Entwicklung von intelligenten Routing, automatisch die Vermeidung der ASN des Verbots.
Sechstens: Sagen Sie etwas, das von Herzen kommt
In der Crawler-Branche ist die Technik nur die Basis.Ressourcen sind das A und O.. Ich habe zu viele Leute gesehen, die ihre eigenen Proxyserver bauen, und die daraus resultierenden Wartungskosten sind erschreckend hoch. Man könnte genauso gut einen professionellen Dienst wie ipipgo nutzen. Zeit zu sparen, um ein paar mehr Crawler zu schreiben, riecht nicht gut.
Zum Schluss noch ein Hinweis für Neulinge: Crawlen Sie nicht nur die Daten.Roboter-ProtokollEs ist wichtig. Einige Websites ausdrücklich nicht erlauben Klettern, wir nicht zwingen, nach allem, nicht das Projekt tun, um Anwälte Brief zu essen, nicht wahr?

