Lo scraping di immagini da Yahoo Image Search è importante quando si generano insiemi di dati di immagini. Questa guida spiega come effettuare lo scraping di immagini da Yahoo Image Search utilizzando Python e la libreria Requests in combinazione con lxml per le tecniche di parsing HTML. Tratta anche l'uso di proxy per evitare di essere scoperti dai sistemi di rilevamento dei bot di Yahoo.
Per effettuare lo scraping di immagini da Yahoo Images, sono necessarie le seguenti librerie Python:
Assicurarsi di avere installato tutte le librerie necessarie. Installarle usando pip:
pip install requests
pip install lxml
Oppure utilizzare un singolo comando:
pip install requests lxml
Per prima cosa, dobbiamo importare le librerie necessarie per il nostro scraper.
import requests
from lxml import html
Eseguiamo quindi una ricerca su Yahoo Images.
Qui definiremo una query di ricerca come cuccioli e invieremo una richiesta GET alla ricerca Yahoo Images con le intestazioni necessarie. Le intestazioni della richiesta sono importanti per imitare una richiesta del browser, il che aiuta a bypassare alcuni meccanismi di base di rilevamento dei bot.
# Definire le intestazioni per simulare una richiesta del browser
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",
}
# Definire la query di ricerca
search_query = "puppies"
# Effettuare una richiesta GET alla pagina di ricerca di Yahoo Images
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers
)
Dopo aver ricevuto la risposta da Yahoo, dobbiamo analizzare l'HTML per estrarre gli URL delle immagini. A tale scopo utilizziamo lxml.
# Analizzare la risposta HTML
parser = fromstring(response.text)
# Estrarre gli URL delle immagini con XPath
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
La funzione fromstring viene utilizzata per analizzare il testo di risposta HTML. Xpath è usato per estrarre gli URL delle immagini. La schermata seguente mostra come è stato ottenuto l'xpath.
Con l'elenco degli URL delle immagini, ora dobbiamo scaricare ogni immagine.
In questo caso, si scorre l'elenco images_urls per estrarre sia il conteggio (indice) sia l'url (indirizzo). Ogni immagine sarà quindi scaricata inviando una richiesta GET al rispettivo url.
# Scaricare ogni immagine e salvarla in un file
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
Infine, salviamo le immagini scaricate nel filesystem locale. Definiamo una funzione download_file che gestisce il processo di salvataggio dei file.
Questa funzione prende il conteggio (per creare nomi di file unici) e la risposta (contenente i dati dell'immagine). Determina l'estensione del file dall'intestazione Content-Type e salva il file nella cartella ./images/.
def download_file(count, response):
# Ottenere l'estensione del file dall'intestazione Content-Type
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# Creare la directory se non esiste
os.makedirs(os.path.dirname(filename), exist_ok=True)
# Scrivere il contenuto della risposta nel file
with open(filename, "wb") as f:
f.write(response.content)
Richiamando questa funzione all'interno del ciclo, salviamo ogni immagine scaricata:
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
download_file(count, response)
Durante lo scraping di dati da Yahoo, è importante conoscere i meccanismi di rilevamento dei bot di Yahoo. Yahoo utilizza principalmente queste tecniche per identificare e bloccare i bot automatici:
Per evitare di essere bloccati dal meccanismo di rilevamento dei bot di Yahoo, soprattutto quando si effettuano più richieste dallo stesso IP, utilizziamo dei proxy per mascherare il nostro indirizzo IP.
Inoltrando le nostre richieste attraverso diversi proxy, possiamo distribuire la nostra attività di scraping su più indirizzi IP, riducendo così la probabilità di essere individuati.
proxies = {
'http': 'http://USER:PASS@HOST:PORT',
'https': 'http://USER:PASS@HOST:PORT'
}
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
Ecco lo script completo per lo scraping delle immagini dai risultati di ricerca di Yahoo Images utilizzando i proxy:
import os
import requests
from lxml.html import fromstring
def download_file(count, response):
"""
Salva il contenuto di una risposta in un file nella directory ./images/.
Args:
count (int): Un identificatore unico per il file.
response (requests.Response): La risposta HTTP contenente il contenuto del file.
"""
# Ottenere l'estensione del file dall'intestazione Content-Type
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# Creare la directory se non esiste
os.makedirs(os.path.dirname(filename), exist_ok=True)
# Scrivere il contenuto della risposta nel file
with open(filename, "wb") as f:
f.write(response.content)
def main():
"""
Funzione principale per cercare immagini e scaricarle.
Questa funzione esegue le seguenti operazioni:
1. Imposta le intestazioni della richiesta.
2. Cerca immagini di cuccioli su Yahoo.
3. Analizza la risposta HTML per estrarre gli URL delle immagini.
4. Scarica ogni immagine e la salva nella directory ./images/.
"""
# Definire le intestazioni per simulare una richiesta del browser
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",
}
# Definire i proxy per bypassare la limitazione di velocità
proxies = {"http": "http://USER:PASS@HOST:PORT", "https": "http://USER:PASS@HOST:PORT"}
# Definire la query di ricerca
search_query = "puppies"
# Effettuare una richiesta GET alla pagina di ricerca di Yahoo Images
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers,
proxies=proxies,
verify=False
)
# Analizzare la risposta HTML
parser = fromstring(response.text)
# Estrarre gli URL delle immagini con XPath
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
# Scaricare ogni immagine e salvarla in un file
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()
Lo scraping di immagini da Yahoo Image Search con Python è una tecnica potente per automatizzare le attività di raccolta e analisi dei dati. Utilizzando la libreria Requests per le richieste HTTP e la libreria lxml per l'analisi dell'HTML, è possibile estrarre in modo efficiente gli URL delle immagini e scaricare le immagini. L'integrazione di proxy consente di evitare il rilevamento e di prevenire i divieti IP durante le attività di scraping più estese.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Commenti: 0