Das Scraping von Bildern aus der Yahoo-Bildersuche ist wichtig für die Erstellung von Bilddatensätzen. Dieser Leitfaden erklärt, wie man Bilder aus der Yahoo-Bildersuche mit Python und der Requests-Bibliothek in Kombination mit lxml für HTML-Parsing-Techniken scrapen kann. Er geht auch auf die Verwendung von Proxys ein, um zu vermeiden, dass sie von den Yahoo-Bot-Erkennungssystemen erfasst werden.
Um Bilder von Yahoo Images zu scrapen, benötigen Sie die folgenden Python-Bibliotheken:
Stellen Sie sicher, dass Sie alle notwendigen Bibliotheken installiert haben. Installieren Sie sie mit pip:
pip install requests
pip install lxml
Oder verwenden Sie einen einzigen Befehl:
pip install requests lxml
Zunächst müssen wir die notwendigen Bibliotheken für unseren Scraper importieren.
import requests
from lxml import html
Als nächstes führen wir eine Suche bei Yahoo Images durch.
Hier werden wir eine Suchanfrage als Welpen definieren und eine GET-Anfrage an die Yahoo-Bilder-Suche mit den notwendigen Headern senden. Die Header der Anfrage sind wichtig, um eine Browser-Anfrage zu imitieren, wodurch einige grundlegende Bot-Erkennungsmechanismen umgangen werden können.
# Definieren Sie Header, um eine Browser-Anfrage zu imitieren
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "en-IN,en;q=0.9",
"cache-control": "max-age=0",
"dnt": "1",
"priority": "u=0, i",
"sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Linux"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
}
# Definieren Sie die Suchanfrage
search_query = "puppies"
# Stellen Sie eine GET-Anfrage an die Suchseite von Yahoo Images
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers
)
Nachdem wir die Antwort von Yahoo erhalten haben, müssen wir das HTML analysieren, um die URLs der Bilder zu extrahieren. Zu diesem Zweck verwenden wir lxml.
# Analysieren Sie die HTML-Antwort
parser = fromstring(response.text)
# Extrahieren von Bild-URLs mit XPath
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
Die Funktion fromstring wird zum Parsen des HTML-Antworttextes verwendet. Xpath wird verwendet, um URLs von Bildern zu extrahieren. Der folgende Screenshot zeigt, wie der Xpath ermittelt wurde.
Mit der Liste der Bild-URLs müssen wir nun jedes Bild herunterladen.
Dazu wird die Liste images_urls in einer Schleife durchlaufen, um sowohl die Anzahl (index) als auch die URL (Adresse) zu extrahieren. Jedes Bild wird dann heruntergeladen, indem eine GET-Anfrage an die entsprechende URL gesendet wird.
# Laden Sie jedes Bild herunter und speichern Sie es in einer Datei
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
Schließlich speichern wir die heruntergeladenen Bilder im lokalen Dateisystem. Wir definieren eine Funktion download_file, die den Speichervorgang übernimmt.
Diese Funktion nimmt die Anzahl (um eindeutige Dateinamen zu erzeugen) und die Antwort (die die Bilddaten enthält). Sie bestimmt die Dateierweiterung aus dem Content-Type-Header und speichert die Datei im Verzeichnis ./images/.
def download_file(count, response):
# Ermitteln der Dateierweiterung aus dem Content-Type-Header
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# Erstellen Sie das Verzeichnis, wenn es nicht existiert
os.makedirs(os.path.dirname(filename), exist_ok=True)
# Schreiben des Antwortinhalts in die Datei
with open(filename, "wb") as f:
f.write(response.content)
Durch den Aufruf dieser Funktion innerhalb der Schleife wird jedes heruntergeladene Bild gespeichert:
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
download_file(count, response)
Beim Scrapen von Daten von Yahoo ist es wichtig, sich der Bot-Erkennungsmechanismen von Yahoo bewusst zu sein. Yahoo verwendet diese Techniken hauptsächlich, um automatisierte Bots zu identifizieren und zu blockieren:
Um zu vermeiden, dass wir vom Yahoo-Bot-Erkennungsmechanismus blockiert werden, insbesondere wenn wir mehrere Anfragen von derselben IP-Adresse stellen, verwenden wir Proxys, um unsere IP-Adresse zu maskieren.
Indem wir unsere Anfragen über verschiedene Proxys leiten, können wir unsere Scraping-Aktivitäten auf mehrere IP-Adressen verteilen und so die Wahrscheinlichkeit verringern, entdeckt zu werden.
proxies = {
'http': 'http://USER:PASS@HOST:PORT',
'https': 'http://USER:PASS@HOST:PORT'
}
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
Hier ist das komplette Skript zum Scrapen von Bildern aus Yahoo Images Suchergebnissen unter Verwendung von Proxys:
import os
import requests
from lxml.html import fromstring
def download_file(count, response):
"""
Speichert den Inhalt einer Antwort in einer Datei im Verzeichnis ./images/.
Args:
count (int): Ein eindeutiger Bezeichner für die Datei.
response (requests.Response): Die HTTP-Antwort, die den Inhalt der Datei enthält.
"""
# Ermitteln der Dateierweiterung aus dem Content-Type-Header
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# Erstellen Sie das Verzeichnis, wenn es nicht existiert
os.makedirs(os.path.dirname(filename), exist_ok=True)
# Schreiben des Antwortinhalts in die Datei
with open(filename, "wb") as f:
f.write(response.content)
def main():
"""
Hauptfunktion, um nach Bildern zu suchen und sie herunterzuladen.
Diese Funktion führt die folgenden Schritte aus:
1. Richtet die Kopfzeilen der Anfrage ein.
2. Sucht nach Bildern von Welpen auf Yahoo.
3. Analysiert die HTML-Antwort, um die Bild-URLs zu extrahieren.
4. Lädt jedes Bild herunter und speichert es in dem Verzeichnis ./images/.
"""
# Definieren Sie Header, um eine Browser-Anfrage zu imitieren
headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-language": "en-IN,en;q=0.9",
"cache-control": "max-age=0",
"dnt": "1",
"priority": "u=0, i",
"sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Linux"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
}
# Definieren Sie Proxys zur Umgehung der Ratenbegrenzung
proxies = {"http": "http://USER:PASS@HOST:PORT", "https": "http://USER:PASS@HOST:PORT"}
# Definieren Sie die Suchanfrage
search_query = "puppies"
# Stellen Sie eine GET-Anfrage an die Suchseite von Yahoo Images
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers,
proxies=proxies,
verify=False
)
# Analysieren Sie die HTML-Antwort
parser = fromstring(response.text)
# Extrahieren von Bild-URLs mit XPath
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
# Laden Sie jedes Bild herunter und speichern Sie es in einer Datei
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
download_file(count, response)
if __name__ == "__main__":
main()
Das Scraping von Bildern aus der Yahoo-Bildersuche mit Python ist eine leistungsstarke Technik zur Automatisierung von Datenerfassungs- und Analyseaufgaben. Durch die Verwendung der Requests-Bibliothek für HTTP-Anfragen und der lxml-Bibliothek für das HTML-Parsing können Sie effizient Bild-URLs extrahieren und die Bilder herunterladen. Durch die Einbindung von Proxys können Sie bei umfangreichen Scraping-Aktivitäten die Erkennung und das Verbot von IP-Sperren vermeiden.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Bemerkungen: 0