Python-Crawler-Praxis: Crawlen Sie bestimmte Bilder anhand von Schlüsselwörtern und laden Sie sie lokal stapelweise herunter

In diesem Artikel wird hauptsächlich die Verwendung des Python-Crawlers zum Crawlen bestimmter Bilder anhand von Schlüsselwörtern und zum lokalen Herunterladen in Stapeln vorgestellt. Außerdem wird die Verwendung von Proxy-IP hinzugefügt, um Anti-Crawling-Maßnahmen zu umgehen und die Benutzerfreundlichkeit und Stabilität des Programms zu verbessern. Der Artikel enthält Code-Implementierung und detaillierte Erklärungen, die für Anfänger zum Lernen geeignet sind.

Inhaltsverzeichnis

Vorwort

Vorbereitung

Fordert Bibliothek an

BeautifulSoup-Bibliothek

Proxy-IP

Umsetzungsschritte

1. Senden Sie eine Anfrage, um HTML-Text zu erhalten

2. Analysieren Sie den HTML-Text, um die Bild-URL zu erhalten

3. Erstellen Sie Ordner und laden Sie Bilder herunter

4. Proxy-IP hinzufügen

Vollständiger Code

Zusammenfassen


Vorwort

Mit der Entwicklung des Internets können wir über Suchmaschinen problemlos nach verschiedenen Bildern suchen, z. B. nach Reisen, Landschaften usw. Aber manchmal müssen wir diese Bilder stapelweise herunterladen. Es ist zu mühsam, sie einzeln manuell herunterzuladen, deshalb müssen wir einen Crawler verwenden, um dies zu erreichen.

Bei der eigentlichen Crawler-Entwicklung werden wir mit einigen Anti-Crawling-Maßnahmen konfrontiert, wie z. B. IP-Einschränkungen, Einschränkungen der Anforderungshäufigkeit usw. Um diese Einschränkungen zu umgehen, können wir eine Proxy-IP verwenden, um unsere echte IP-Adresse zu verbergen und das Risiko einer Sperrung zu verringern.

Daher werden wir in diesem Artikel einen Python-Crawler verwenden, um bestimmte Bilder basierend auf Schlüsselwörtern zu crawlen und sie lokal in Stapeln herunterzuladen, und die Verwendung von Proxy-IP hinzufügen, um Anti-Crawling-Maßnahmen zu umgehen.

1. Vorbereitungsarbeiten

Bevor wir mit dem Schreiben von Code beginnen, müssen wir einige notwendige Kenntnisse und Tools verstehen.

Fordert Bibliothek an

Requests ist eine Drittanbieterbibliothek in Python, die eine einfache und intuitive HTTP-Anfrage-API bereitstellt, die es uns ermöglicht, HTTP/1.1-Anfragen mit Python zu senden. Es verwendet die grundlegenden Methoden im Python-Standardbibliotheksmodul urllib, aber die Requests-Bibliothek kann HTTP/1.1-Anfragen bequemer senden und unterstützt mehr HTTP-Anfragemethoden wie PUT, DELETE, HEAD, OPTIONS usw. Die Requests-Bibliothek bietet außerdem eine praktischere Session-Klasse, die Cookies und andere Informationen zwischen mehreren Anfragen verwalten kann und die Verwendung erweiterter Funktionen wie Proxys erleichtert.

Wir können die Requests-Bibliothek mit dem folgenden Befehl installieren:

pip install requests
BeautifulSoup-Bibliothek

BeautifulSoup ist eine Drittanbieter-Bibliothek in Python, die eine Möglichkeit bietet, Daten aus HTML- oder XML-Dateien zu extrahieren. Es kann komplexen HTML-Text automatisch in eine Baumstruktur analysieren und bietet integrierte Durchlauf- und Suchmethoden, die das Parsen von HTML-Text vereinfachen. Mit der BeautifulSoup-Bibliothek können Sie die auf der Webseite angegebenen Tags oder Attribute einfach extrahieren und entsprechend verarbeiten.

Wir können die BeautifulSoup-Bibliothek mit dem folgenden Befehl installieren:

pip install beautifulsoup4
Proxy-IP

Proxy-IP ist eine Art Transitserver, der das Senden unserer Anfragen über den Proxyserver ermöglicht und unsere echte IP-Adresse verbirgt. Durch die Verwendung einer Proxy-IP können einige Anti-Crawling-Maßnahmen umgangen, die Blockierung der IP verhindert und die Benutzerfreundlichkeit des Programms verbessert werden.

Wir können es über einige kostenlose Proxy-IP-Websites im Internet erhalten, einschließlich HTTP und HTTPS. Sie müssen jedoch auf die Verfügbarkeit und Stabilität der Proxy-IP achten, um unnötige Probleme zu vermeiden.

2. Umsetzungsschritte

1. Senden Sie eine Anfrage, um HTML-Text zu erhalten

Wir müssen zuerst eine Anfrage senden, um den HTML-Text zu erhalten. Hier nehmen wir eine bestimmte Bildsuchseite als Beispiel. Verwenden Sie zunächst die get-Methode in der Anforderungsbibliothek, um eine Anforderung zu senden und den erhaltenen Inhalt in der Inhaltsvariablen zu speichern.

import requests

url = "https://image.baidu.com/search/index?tn=baiduimage&word=美景"
response = requests.get(url)
content = response.content
2. Analysieren Sie den HTML-Text, um die Bild-URL zu erhalten

Als nächstes verwenden Sie die BeautifulSoup-Bibliothek, um den HTML-Text zu analysieren, alle IMG-Tags abzurufen und die Bild-URL daraus zu extrahieren. Hier haben wir nur die Bild-URLs im data-src-Attribut extrahiert und in einer Liste gespeichert.

from bs4 import BeautifulSoup

soup = BeautifulSoup(content, 'html.parser')
img_tags = soup.find_all('img')

img_urls = []
for tag in img_tags:
    img_url = tag.get('data-src')
    if img_url:
        img_urls.append(img_url)

Es ist zu beachten, dass wir feststellen müssen, ob das Attribut data-src vorhanden ist, da die Bild-URL möglicherweise im Attribut data-src anstelle des Attributs src vorhanden ist. Einige Bilder verfügen möglicherweise nicht über das Attribut data-src, und wir müssen es entsprechend der tatsächlichen Situation ändern.

3. Erstellen Sie Ordner und laden Sie Bilder herunter

Nachdem wir alle Bild-URLs erhalten haben, müssen wir sie lokal stapelweise herunterladen. Hier erstellen wir einen Ordner mit dem Namen Bilder und speichern die heruntergeladenen Bilder darin.

import os

save_dir = "./images"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

Als nächstes verwenden Sie die Get-Methode der Requests-Bibliothek, um jede Bild-URL anzufordern und den erhaltenen Inhalt als Binärdatei zu speichern. Wir benennen die heruntergeladenen Dateien 0.jpg, 1.jpg, 2.jpg... und speichern sie der Reihe nach im Bilderordner.

for i, img_url in enumerate(img_urls):
    response = requests.get(img_url)

    with open(os.path.join(save_dir, f"{i}.jpg"), "wb") as f:
        f.write(response.content)

Beachten Sie, dass die Datei möglicherweise nicht gespeichert werden kann, wenn Sie die Bild-URL direkt als Dateinamen verwenden, da sie einige Sonderzeichen enthält. Um dieses Problem zu vermeiden, haben wir daher die Methode übernommen, sie nacheinander mit Zahlen zu benennen.

4. Proxy-IP hinzufügen

Bevor wir Proxy-IP verwenden, müssen wir einige verfügbare Proxy-IP-Adressen erhalten. Hier verwenden wir eine Liste namens Proxys, um darin mehrere Proxy-IP-Adressen und entsprechende Portnummern zu speichern.

proxies = [
    "http://ip_address1:port",
    "http://ip_address2:port",
    "http://ip_address3:port",
    ...
]

Als nächstes verwenden wir den Proxys-Parameter der Requests-Bibliothek, um die Proxy-IP für Requests festzulegen. Wir wählen nach dem Zufallsprinzip eine verfügbare Proxy-IP aus, um Anfragen zu stellen, um das Risiko einer Sperrung zu vermeiden.

import random

proxy = {
    "http": "http://" + proxies[random.randint(0, len(proxies) - 1)]
}
response = requests.get(img_url, proxies=proxy)

Es ist zu beachten, dass das Format jeder Proxy-IP http://ip_address:port oder https://ip_address:port ist. Hier haben wir die Proxy-IP unter Verwendung des http-Protokolls ausgewählt. Wenn wir außerdem die Proxy-IP des https-Protokolls verwenden müssen, müssen wir nur http durch https ersetzen.

3. Vollständiger Code

Das Folgende ist die vollständige Code-Implementierung, einschließlich der Verwendung von Proxy-IP:

import requests
import os
import random

url = "https://image.baidu.com/search/index?tn=baiduimage&word=美景"

proxies = [
    "http://ip_address1:port",
    "http://ip_address2:port",
    "http://ip_address3:port",
    ...
]

response = requests.get(url)
content = response.content

# 使用BeautifulSoup库解析HTML
from bs4 import BeautifulSoup

soup = BeautifulSoup(content, 'html.parser')
img_tags = soup.find_all('img')

img_urls = []
for tag in img_tags:
    img_url = tag.get('data-src')
    if img_url:
        img_urls.append(img_url)

# 创建文件夹,存储下载的图片
save_dir = "./images"
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 使用代理IP进行请求
for i, img_url in enumerate(img_urls):
    proxy = {
        "http": "http://" + proxies[random.randint(0, len(proxies) - 1)]
    }
    response = requests.get(img_url, proxies=proxy)

    with open(os.path.join(save_dir, f"{i}.jpg"), "wb") as f:
        f.write(response.content)

4. Zusammenfassung

In diesem Artikel wird erläutert, wie Sie mithilfe eines Python-Crawlers bestimmte Bilder anhand von Schlüsselwörtern crawlen und lokal stapelweise herunterladen sowie die Verwendung von Proxy-IP hinzufügen, um Anti-Crawling-Maßnahmen zu umgehen. Es ist zu beachten, dass die Verfügbarkeit und Stabilität der Proxy-IP einen großen Einfluss auf die Programmleistung hat. Wir müssen die Proxy-IP sorgfältig auswählen und testen, um die Benutzerfreundlichkeit und Stabilität des Programms zu verbessern.

Supongo que te gusta

Origin blog.csdn.net/wq10_12/article/details/133271031
Recomendado
Clasificación