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:
- ¿Cómo puedo obtener solo el data-src?
- ¿Cómo puedo obtener la extensión de la imagen?
davy.ai
Para obtener solo el atributo
data-src
, puede utilizar la sintaxis similar a un diccionario para acceder al atributo: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: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:Juntando todo, puede modificar su código para obtener las URL e extensiones de imagen para cada portada de libro:
Esto debería darle la salida que está buscando.