Extracción de una imagen de una página web usando xpath

Estoy acá con una duda acerca de cómo extraer una imagen de una página web.

Tengo la siguiente página

Diario Portada

La cual contiene una imagen que se actualiza diariamente, se la puede ver a la tapa de un periódico de mi zona. La misma imagen contiene un nombre que cambia aleatoriamente de nombre, es decir no lleva un patrón, por lo que leyendo por la web vi que se puede hacer una extracción usando la librería xpath y yendo directo a los tags, divs, src etc.

Mi duda es ¿Cómo puedo extraer esa imagen a una carpeta determinada?

Vi en muchos lugares que descargan muchas imágenes de un sitio web como por ej mercadolibre u olx, en mi caso es 1 sola imagen y guardarla en una ubicación de mi pc.

Respuesta

No trabajo con Python, aunque alguna vez he contestado consultas en este hilo porque no eran solo de Python. Como veo que nadie te ha dicho nada he decidido decir yo algo.
La cuestión es, si te he entendido bien, que quieres lanzar cada día un proceso (parece que has pensado en Python, pero supongo que valdría otro) que acceda a la página cuyo enlace indicas en la consulta y copie la imagen de la portada en una ubicación predeterminada de tu equipo. A veces uso un Visual Basic elemental (tampoco soy muy versado en VB) para "navegar" entre ventanas y capturar información de algunas de ellas. Incluso he creado un documento informativo sobre esta forma de actuar. Te dejo un enlace que lo dejará disponible durante un par de días: https://drive.google.com/file/d/1PyZapfW6PM0r7NAQSPjYr63Upo-s6eIr/view?usp=sharing

Para este caso concreto el VB que he preparado y probado sería:

Option Explicit
Private Const MOUSEEVENTF_LEFTDOWN As Long = &H2
Private Const MOUSEEVENTF_LEFTUP As Long = &H4
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" ( _
     ByRef lpPoint As POINTAPI) As Long
Private Declare PtrSafe Sub mouse_event Lib "user32.dll" ( _
     ByVal dwFlags As Long, _
     ByVal dx As Long, _
     ByVal dy As Long, _
     ByVal cButtons As Long, _
     ByVal dwExtraInfo As Long)
Private Declare PtrSafe Function SetCursorPos Lib "user32.dll" ( _
     ByVal x As Long, _
     ByVal y As Long) As Long
Sub CaptPagEntrada()
' Para capturar la página de entrada de la dirección indicada
Dim CurPos As POINTAPI
Dim navegador, pagina, carpeta, fecha As String
    navegador = "c:\program files\mozilla firefox\firefox.exe"
    pagina = "https://www.elesquiu.com/noticias/edicionimpresa.html"
    carpeta = "d:\carpeta prueba\"
    Shell navegador & " " & pagina, vbNormalFocus
    fecha = Format(Date, "ddMMyyyy")
    Pausa 3
    AppActivate ("Mozilla Firefox")
    SendKeys "{TAB}"
    Pausa 3
    SetCursorPos 500, 500
    Pausa 2
    Contextual
    Pausa 2
    SendKeys "{DOWN 2}"
    pausa 2
    SendKeys "{ENTER}"
    pausa 2
    SendKeys "{LEFT}"
    pausa 2
    SendKeys carpeta & fecha & "_"
    pausa 2
    SendKeys "{TAB 3}"
    pausa 5
    SendKeys "{ENTER}"
    pausa 2
End Sub
Private Function Contextual()
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0&, 0&, 0&, 0&
    mouse_event MOUSEEVENTF_RIGHTUP, 0&, 0&, 0&, 0&
End Function
Private Function Click()
    mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0&
    mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&
End Function
Private Function DblClick()
Click:         Click
End Function
Private Function pausa(tiempopausa)
Dim inicio, final
    inicio = Timer
    Do While Timer < inicio + tiempopausa
        DoEvents
    Loop
End Function

Yo lo ejecuto desde Excel, entrando en el VB con Alt+F11. Uso Firefox como navegador aunque imagino que también funcionará con otros y es configurable la variable correspondiente. Cuando  lo ejecuto me deja en la carpeta elegida (en este caso D:\carpeta prueba) la imagen de la página  de entrada a la URL indicada (en este caso https://www.elesquiu.com/noticias/edicionimpresa.html) precedida de la fecha en formato ddmmaaaa y un guión bajo. El problema es que no sé automatizarlo para que se ejecute cada día porque no sé incluirlo en el programador de tareas.
Bueno, a lo mejor te sirve de algo.

Me ha llegado una solicitud para compartir el archivo cuyo enlace figura más arriba. No acabo de entender que tenga que hacer algo para que puedas acceder a ese archivo. He probado desde otro equipo usando el enlace y no me da ningún problema. Pero no tengo mucha experiencia y es posible que esté haciendo algo mal. Si no puedes acceder al archivo dímelo y ya vemos como se puede resolver.

Por cierto, ya he aprendido a lanzarlo desde el programador de tareas.

¿En qué quedó esto? Me parece recordar que habías encontrado una solución que ibas a poner por aquí por si le servía a algún otro usuario de Python.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas