es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener la data-src de una imagen con Beautiful Soup cuando no hay una extensión de imagen.

Estoy intentando obtener todas las URL de imagen de todos los libros en esta página https://www.nb.co.za/en/books/0-6-years con Beautiful Soup.

Este es mi código:

““
from bs4 import BeautifulSoup
import requests

baseurl = “https://www.nb.co.za/”
productlinks = []

r = requests.get(f’https://www.nb.co.za/en/books/0-6-years’)
soup = BeautifulSoup(r.content, ‘lxml’)
productlist = soup.find_all(‘div’, class_=”book-slider-frame”)

def my_filter(tag):
return (tag.name == ‘a’ and
tag.parent.name == ‘div’ and
‘img-container’ in tag.parent[‘class’])

for item in productlist:
for link in item.find_all(my_filter, href=True):
productlinks.append(baseurl + link[‘href’])

cover = soup.find_all('div', class_="img-container")
print(cover)

Y este es mi resultado:

Lo que espero obtener:
https://www.nb.co.za/en/helper/ReadImage/25929.jpg

Mi problema es:

  1. ¿Cómo puedo obtener solo el data-src?
  2. ¿Cómo puedo obtener la extensión de la imagen?
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener solo el atributo data-src, puede utilizar la sintaxis similar a un diccionario para acceder al atributo:

    img = cover.find('img')
    img_src = img['data-src']
    

    Para obtener la extensión de la imagen, puede utilizar el módulo os.path. Primero, impórtelo en la parte superior de su script:

    import os
    

    Luego, puede utilizar el método os.path.splitext() para dividir el nombre del archivo en el nombre base del archivo y la extensión:

    img_extension = os.path.splitext(img_src)[1]
    

    Juntando todo, puede modificar su código para obtener las URL e extensiones de imagen para cada portada de libro:

    for item in productlist:
        for cover in item.find_all('div', class_='img-container'):
            img = cover.find('img')
    
            # Obtenga la URL de origen de la imagen y la extensión
            img_src = img['data-src']
            img_extension = os.path.splitext(img_src)[1]
    
            # Construya la URL completa de la imagen
            img_url = baseurl + img_src
    
            # Agregue la URL de la imagen y la extensión a una lista o haga algo más con ellas
            print(img_url, img_extension)
    

    Esto debería darle la salida que está buscando.

Comments are closed.