Raspe y descargue imágenes de Google con Python

Publicado: 2023-01-02

La creciente prevalencia del web scraping ha aumentado considerablemente sus áreas de uso. En la actualidad, muchas aplicaciones de IA alimentan conjuntos de datos de web scraping con datos actualizados de forma regular. Hay un flujo regular e ininterrumpido de datos desde los sitios web objetivo hasta los conjuntos de datos de las aplicaciones de inteligencia artificial.

Publicación relacionada: El impacto de la inteligencia artificial en el futuro del éxito del cliente

El procesamiento de imágenes es una de las áreas más populares en las aplicaciones de inteligencia artificial. El procesamiento de imágenes es un campo de las ciencias de la computación que se enfoca en permitir que las computadoras identifiquen y comprendan objetos y personas en imágenes y videos. Al igual que otros tipos de inteligencia artificial, el procesamiento de imágenes tiene como objetivo realizar y automatizar tareas que replican las capacidades humanas. En este caso, el procesamiento de imágenes trata de copiar tanto la forma en que las personas ven como la forma en que le dan sentido a lo que ven.

Los datos necesarios para el desarrollo de algoritmos y reducción de márgenes de error en muchos campos, especialmente en proyectos de procesamiento de imágenes, se obtienen mediante web scraping. En este artículo, desarrollaremos una aplicación que se usa con frecuencia en proyectos de procesamiento de imágenes. Rasparemos y descargaremos Google Images con el lenguaje de programación Python. Entonces empecemos.

Configuración del proyecto

Primero, abramos una carpeta en el escritorio. Abramos una terminal en esta ruta de archivo e instalemos las bibliotecas necesarias ejecutando el siguiente comando.

solicitudes de instalación pip bs4

Después de instalar las bibliotecas necesarias, creemos un archivo llamado 'index.py' en la carpeta.

Código

Peguemos los siguientes códigos en el archivo 'index.py' que creamos.

solicitudes de importación, re, json, urllib.request
desde bs4 importar BeautifulSoupheaders = {
“Agente de usuario”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/103.0.5060.114 Safari/537.36”
}queryParameters = {“q”: “marvel”, “tbm”: “isch”, “hl”: “en”, “gl”: “us”, “ijn”: “0” }

target_image_path = “.isv-r.PNCib.MSM1fd.BUooTd”
targetted_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = solicitudes.get(“https://www.google.com/search”, params=parámetros de consulta, encabezados=encabezados, tiempo de espera=30)
sopa = BeautifulSoup(html.text, “lxml”)

google_images = []

def scrape_and_download_google_images():

imágenes_datos_en_json = convertir_imagen_a_json()

datos_de_imagen_emparejados = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

remove_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

imágenes_de_resolución_coincidentes = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, miniaturas_coincidentes_eliminadas)

imágenes_de_resolución_completa = obtener_imagen_de_resolución(imágenes_de_resolución_coincidentes=imágenes_de_resolución_coincidentes)

para el índice, (image_data, image_link) en enumerate(zip(soup.select(target_image_path), full_solution_images), start=1):

append_image_to_list(imagen_datos=imagen_datos, imagen_enlace=imagen_enlace)

print(f'{index}. La imagen comenzó a descargarse')

descargar_imagen(imagen_enlace=imagen_enlace, índice=índice)

print(f'{index}. imagen descargada con éxito')

print(f'imágenes raspadas y descargadas: {google_images}')

def remove_matched_get_thumbnails(matched_google_image_data):
volver re.sub(
r'\[\”(https\:\/\/encrypted-tbn0\.gstatic\.com\/images\?.*?)\”,\d+,\d+\]', “”, str(matched_google_image_data ))

def obtener_resolución_imagen(imágenes_resolución_coincidentes):
devolver [
bytes(bytes(img, “ascii”).decode(“unicode-escape”), “ascii”).decode(“unicode-escape”) para img en imágenes_resolución_coincidentes
]

def convertir_imagen_a_json():
all_script_tags = sopa.select(“script”)
images_data = “”.join(re.findall(r”AF_initDataCallback\(([^<]+)\);”, str(all_script_tags)))
datos_imágenes_fijas = json.dumps(datos_imágenes)
devolver json.loads (fixed_images_data)

def append_image_to_list(image_data, image_link):
google_images.append({
“image_title”: image_data.select_one(targetted_image_base_html_path)[“title”],
“image_source_link”: image_data.select_one(targetted_image_base_html_path)[“href”],
“imagen_enlace”: imagen_enlace
})

def descargar_imagen(imagen_enlace, índice):
abridor=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/101.0.4951.54 Safari/537.36′)]
urllib.request.install_opener(abridor)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

raspar_y_descargar_google_images()

Si examinamos los códigos, veamos primero los campos con valores estáticos. Los siguientes campos se definen como valores estáticos. Especificamos el nombre y las propiedades de la imagen que queremos raspar y descargar con la variable queryParams.

Lea también: El ChatGPT: sus implicaciones para las empresas

encabezados = {
“Agente de usuario”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/103.0.5060.114 Safari/537.36”
}queryParameters = {“q”: “marvel”, “tbm”: “isch”, “hl”: “en”, “gl”: “us”, “ijn”: “0” }target_image_path = “.isv- r.PNCib.MSM1fd.BUooTd”
target_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = solicitudes.get(“https://www.google.com/search”, params=parámetros de consulta, encabezados=encabezados, tiempo de espera=30)
sopa = BeautifulSoup(html.text, “lxml”)

google_images = []

El método scrape_and_download_google_images() es donde comienza la transmisión. las imágenes seleccionadas se raspan y luego se descargan a la carpeta que especificamos.

def scrape_and_download_google_images():

imágenes_datos_en_json = convertir_imagen_a_json()

datos_de_imagen_emparejados = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

remove_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

imágenes_de_resolución_coincidentes = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, miniaturas_coincidentes_eliminadas)

imágenes_de_resolución_completa = obtener_imagen_de_resolución(imágenes_de_resolución_coincidentes=imágenes_de_resolución_coincidentes)

para el índice, (image_data, image_link) en enumerate(zip(soup.select(target_image_path), full_solution_images), start=1):

append_image_to_list(imagen_datos=imagen_datos, imagen_enlace=imagen_enlace)

print(f'{index}. La imagen comenzó a descargarse')

descargar_imagen(imagen_enlace=imagen_enlace, índice=índice)

print(f'{index}. imagen descargada con éxito')

print(f'imágenes raspadas y descargadas: {google_images}')

La descarga de la imagen raspada a la carpeta se realiza con el método download_image(image_link=image_link, index=index). La imagen raspada en este método se guarda en "Scraped_Images" que agregamos previamente a la ubicación del archivo del proyecto.

Nota: Cree la carpeta "Scraped_Images" en la estructura del proyecto antes de ejecutar la aplicación

def descargar_imagen(imagen_enlace, índice):
abridor=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/101.0.4951.54 Safari/537.36′)]
urllib.request.install_opener(abridor)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

Lea también: ¿Cuáles son las aplicaciones y los beneficios de blockchain como servicio para las empresas?

Correr

Para ejecutar la aplicación, abramos una terminal en la ubicación del archivo y ejecutemos el siguiente comando.

python index.py

Después de que se ejecuta la aplicación, la siguiente información se imprime en la consola de la aplicación.

1. la imagen comenzó a descargarse
1. imagen descargada con éxito
2. la imagen comenzó a descargarse
2. imagen descargada con éxito
3. la imagen comenzó a descargarse
3. imagen descargada con éxito
4. la imagen comenzó a descargarse
4. imagen descargada con éxito
5. la imagen comenzó a descargarse
5. imagen descargada con éxito
6. la imagen comenzó a descargarse
6. imagen descargada con éxito
7. la imagen comenzó a descargarse
7. imagen descargada con éxito
[…]
48. la imagen comenzó a descargarse
48. imagen descargada con éxitoimágenes raspadas y descargadas:
[
{
'image_title': 'Cómics de Marvel – Wikipedia',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Comics',
'image_link': 'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Marvel_Logo.svg/1200px-Marvel_Logo.svg.png'
},
{
'image_title': 'Universo Marvel – Wikipedia',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Universe',
'image_link': 'https://upload.wikimedia.org/wikipedia/en/1/19/Marvel_Universe_%28Civil_War%29.jpg'
},
{
'image_title': 'Marvel.com | El sitio oficial de Marvel Movies, Characters, Comics, TV',
'image_source_link': 'https://www.marvel.com/',
'image_link': 'https://i.annihil.us/u/prod/marvel/images/OpenGraph-TW-1200×630.jpg'
},
{
'image_title': 'Entretenimiento de Marvel – YouTube',
'image_source_link': 'https://www.youtube.com/c/marvel',
'image_link': 'https://yt3.ggpht.com/fGvQjp1vAT1R4bAKTFLaSbdsfdYFDwAzVjeRVQeikH22bvHWsGULZdwIkpZXktcXZc5gFJuA3w=s900-ck-c0x00ffffff-no-rj'
},
{
'image_title': 'Películas y programas de Marvel | Disney+',
'image_source_link': 'https://www.disneyplus.com/brand/marvel',
'image_link': 'https://prod-ripcut-delivery.disney-plus.net/v1/variant/disney/DA2E198288BFCA56AB53340211B38DE7134E40E4521EDCAFE6FFB8CD69250DE9/scale?width=2880&aspectRatio=1.78&format=jpeg'
},
{
'image_title': 'Una introducción a Marvel para novatos | CABLEADO',
'image_source_link': 'https://www.wired.com/2012/03/an-intro-to-marvel-for-newbies/',
'image_link': 'https://media.wired.com/photos/5955ceabcbd9b77a41915cf6/master/pass/marvel-characters.jpg'
},
{
'image_title': 'Cómo ver todas las películas de Marvel en el orden de la historia – Desfile: entretenimiento, recetas, salud, vida, vacaciones',
'image_source_link': 'https://parade.com/1009863/alexandra-hurtado/marvel-movies-order/',
'image_link': 'https://parade.com/.image/t_share/MTkwNTgxMjkxNjk3NDQ4ODI4/marveldisney.jpg'
},
{
'image_title': 'Cómics de Marvel | Historia, personajes, hechos y películas | británica',
'image_source_link': 'https://www.britannica.com/topic/Marvel-Comics',
'image_link': 'https://cdn.britannica.com/62/182362-050-BD31B42D/Scarlett-Johansson-Black-Widow-Chris-Hemsworth-Thor.jpg'
},
{
'image_title': 'Capitana Marvel (2019) – IMDb',
'image_source_link': 'https://www.imdb.com/title/tt4154664/',
'image_link': 'https://m.media-amazon.com/images/M/MV5BMTE0YWFmOTMtYTU2ZS00ZTIxLWE3OTEtYTNiYzBkZjViZThiXkEyXkFqcGdeQXVyODMzMzQ4OTI@._V1_FMjpg_UX1000_.jpg'
},
[…]
]

Miremos el archivo “Scraped_Images” para verificar las imágenes descargadas.

Scraped Images

Lea también: Tipos de corporaciones y cómo incorporar su negocio de inicio

Conclusión

Hicimos el raspado y la descarga de Google Images, que era necesario por alguna razón, con python. Si desea obtener las imágenes que necesita de Google sin escribir ningún código, explore la API de Zenserp. Aquí está su poderosa y maravillosa documentación que se actualiza constantemente.