
Praktische Übungen zur Verwendung von BeautifulSoup für das Crawling im Internet
Vor kurzem gab es immer alte Eisen fragte mich, mit Python in Web-Crawling immer blockiert werden IP, wie man mit umgehen? Heute werden wir über diese Angelegenheit zu nörgeln. Beginnen wir mit einem realen Fall: mein Schüler wollte den Preis für eine bestimmte Website im letzten Monat zu fangen, nur um 200 IP wurde schwarz gezogen fangen. Dieses Mal haben wir unsere bietenProxy-IP-MethodeBesonders mit dem ipipgo-Heimdienst, der für eine intensive Akquisition erprobt ist.
Warum brauche ich eine Proxy-IP?
Um ein Beispiel zu nennen: Die Website ist wie ein Pförtner der Gemeinschaft, man geht jeden Tag in denselben Kleidern ein und aus, drei Tage lang, um erkannt zu werden. Proxy IP istDrag QueenWenn Sie für jede Anfrage einen anderen Bevollmächtigten verwenden wollen, müssen Sie Ihre "Rüstung" ändern. Aber Achtung, verwenden Sie nicht diese kostenlosen Proxys, neun von zehn sind Schrott. Wie ipipgo dieser professionelle Dienstleister, IP-Pool ist groß und stabil, nicht leicht zu stürzen.
Anfragen importieren
von bs4 importieren BeautifulSoup
proxies = {
'http': 'http://username:password@proxy.ipipgo.com:9020',
'https': 'https://username:password@proxy.ipipgo.com:9020'
}
response = requests.get('https://目标网站.com', proxies=proxies)
soup = BeautifulSoup(response.text, 'html.parser')
gefolgt von Ihrem Parsing-Code...
Seien Sie nicht schlampig bei der Vorbereitung der Umwelt
Die Frage des Ladens von Bibliotheken ist manchmal ziemlich metaphysisch, und wir empfehlen die Verwendung der Tsinghua Mirror Source:
pip install beautifulsoup4 requests -i https://pypi.tuna.tsinghua.edu.cn/simple
Achten Sie auf die Versionskompatibilität, empfohlen wird Python 3.8 oder höher. Wenn Sie SSL-Fehler feststellen, sollten Sie Ihr Zertifikat aktualisieren:
pip install --upgrade certifi
Vier Schritte zum eigentlichen Kampf
1) Verkleiden Sie zunächst die Header-Datei, damit die Website Sie nicht als Reptil identifizieren kann.
headers = {
User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) wie ein anständiger Browser',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
(2) Proxy-Einstellungen sollten vorsichtig sein, ist es empfehlenswert, Sitzung zu verwenden, um die Sitzung zu halten:
session = requests.Session()
session.proxies.update(proxies)
(3) Das Parsing ist am sichersten bei CSS-Selektoren, z. B. bei der Suche nach dem Preis eines Produkts:
price_tags = soup.select('div.price-wrapper > span.current-price')
4) Seien Sie nicht faul bei der Behandlung von Ausnahmen, insbesondere bei Netzschwankungen:
try:
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f"撞了: {err}")
这里可以触发ipipgo的自动切换IP功能
Entminung von Schlaglöchern
| symptomatisch | Gegenmittel |
|---|---|
| Gibt einen 403-Fehler zurück | Überprüfung von User-Agent und Cookies |
| Zeitüberschreitung der Verbindung | Erhöhen Sie den Timeout-Parameter |
| Datenschieflage | Bestätigung von Änderungen an der Struktur der Seite |
QA-Zeit
F: Muss ich meine IP mit ipipgo häufig ändern?
A: Seine IP-Pool groß genug ist, wird die Standardeinstellung automatisch drehen, es sei denn, besonders hohe Frequenz Erwerb, in der Regel nicht manuell ändern müssen.
F: Wie wird die Kriechgeschwindigkeit kontrolliert?
A: Es wird vorgeschlagen, eine zufällige Verzögerung hinzuzufügen:
Zeit importieren
importieren random
time.sleep(random.uniform(1, 3)) Random sleep 1-3 Sekunden
F: Was sollte ich tun, wenn ich auf ein CAPTCHA stoße?
A: Diese Situation legt nahe: 1. die Häufigkeit der Anfragen zu reduzieren 2. den großen Vorrat an Agenten von ipipgo zu nutzen 3. auf der Kodierungsplattform (aber die Kosten steigen)
Ein letztes Wort.
Proxy IP ist kein Allheilmittel, sondern der Schlüssel zurVorgeben, eine echte Person zu sein.Die ipipgo Familie dynamischen Wohn-Agent ist besonders geeignet für die Notwendigkeit einer langfristigen Sammlung der Szene, die Pro-Test Dauerlauf für eine Woche nicht blockiert worden. Denken Sie daran, Web-Seite zu erfassen, um Kampfkünste zu sprechen, nicht machen die Menschen die Server aufhängen.

