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.

¿Cómo puedo abrir todos los enlaces y guardar las imágenes en una carpeta en un directorio específico en mi PC?

Código:

import urllib.request
from bs4 import BeautifulSoup
from requests import get
import requests
import dload
import pandas as pd
pd.set_option('display.max_colwidth', None)

week11picURL = "https://www.packers.com/photos/game-photos-packers-at-vikings-week-11-2021#9258618e-e793-41ae-8d9a-d3792366dcbb"

response = get(week11picURL)
print(response)

htmlpage = requests.get(week11picURL)
soup = BeautifulSoup(htmlpage.content, 'html.parser')
image = soup.findAll('div', class_="nfl-c-photo-album_picture-wrapper")

data = []

for x in soup.select('.nfl-c-photo-album__picture-wrapper picture source:first-child'):
    try:
        data.append(x['srcset'].split(',')[0])
    except:
        data.append(x['data-srcset'].split(',')[0])

data

testurl = "https://static.clubs.nfl.com/image/private/tnewphotoalbum/f_auto/packers/f6jcqnmhbzs2dyvepa8z.jpg"

df = pd.DataFrame(data)
replace = df.replace(["/t_lazy", "1x"], "", regex=True)

folder = "f:/nfl pics/packers/week 11 - at vikings"
save = dload.save_multi(url_list=replace[0].tolist(), dir=folder, max_threads=1, tsleep=0.05)

Datos sustituidos:

0
0 https://static.clubs.nfl.com/image/private/t_new_photo_album/f_auto/packers/hjmcucejx2vmfshjkdkj.jpg
1 https://static.clubs.nfl.com/image/private/t_new_photo_album/f_auto/packers/rgsvjp6sxu89ditolacv.jpg
2 https://static.clubs.nfl.com/image/private/t_new_photo_album/f_auto/packers/zsogvqrqgaauqcdgejde.jpg
3 https://static.clubs.nfl.com/image/private/t_new_photo_album/f_auto/packers/jyegqthuab2hsuygirqp.jpg
4 https://static.clubs.nfl.com/image/private/t_new_photo_album/f_auto/packers/kwsq1fvn41f6kzqo4nkl.jpg
etc.

El error que obtengo al usar mi función “save” es:

Traceback (most recent call last):
File "ubicación", line 174, in save_multi
with open(url_list) as f:
TypeError: expected str, bytes or os.PathLike object, not DataFrame

Estoy tratando de encontrar una forma de abrir automáticamente todos los enlaces de los datos en “replace” y guardar las imágenes respectivas en el directorio etiquetado como “folder”. Cuando intento usar mi función “save”, obtengo el error anterior. ¿Cómo resuelvo este problema o hay una forma más eficiente de hacerlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que la función “dload.save_multi()” espera como primer argumento una lista de URLs, pero en su lugar se está pasando un DataFrame de pandas.

    Para solucionar esto, se pueden extraer las URLs del DataFrame y convertirlas en una lista antes de pasarlas a la función “dload.save_multi()”.

    Aquí está el código actualizado:

    import urllib.request
    from bs4 import BeautifulSoup
    from requests import get
    import requests
    import dload
    import pandas as pd
    pd.set_option('display.max_colwidth', None)
    
    week_11_picURL = "https://www.packers.com/photos/game-photos-packers-at-vikings-week-11-2021#9258618e-e793-41ae-8d9a-d3792366dcbb"
    
    response = get(week_11_picURL)
    print(response)
    
    html_page = requests.get(week_11_picURL)
    soup = BeautifulSoup(html_page.content, 'html.parser')
    image = soup.findAll('div', class_="nfl-c-photo-album__picture-wrapper")
    
    data = []
    
    for x in soup.select('.nfl-c-photo-album__picture-wrapper picture source:first-child'):
        try:
            data.append(x['srcset'].split(',')[0])
        except:
            data.append(x['data-srcset'].split(',')[0])
    
    df = pd.DataFrame(data)
    replace = df.replace(["/t_lazy", "1x"], "", regex=True)
    
    url_list = replace[0].tolist() # convertir DataFrame a lista
    
    folder = "f:/nfl pics/packers/week 11 - at vikings"
    save = dload.save_multi(url_list=url_list, dir=folder, max_threads=1, tsleep=0.05)
    

    Este código debería funcionar correctamente para descargar todas las imágenes de las URLs en la variable “replace” y guardarlas en el directorio “folder”.

Comments are closed.