Estoy escribiendo un raspador que descarga todos los archivos de imagen de una página HTML y los guarda en una carpeta específica. todas las imágenes son parte de la página HTML.¿Descargar archivo de imagen de la fuente de la página HTML usando Python?
Respuesta
Aquí hay un código para descargar todas las imágenes de la URL proporcionada y guardarlas en la carpeta de salida especificada. Puede modificarlo para sus propias necesidades.
"""
dumpimages.py
Downloads all the images on the supplied URL, and saves them to the
specified output file ("/test/" by default)
Usage:
python dumpimages.py http://example.com/ [output]
"""
from BeautifulSoup import BeautifulSoup as bs
import urlparse
from urllib2 import urlopen
from urllib import urlretrieve
import os
import sys
def main(url, out_folder="/test/"):
"""Downloads all the images at 'url' to /test/"""
soup = bs(urlopen(url))
parsed = list(urlparse.urlparse(url))
for image in soup.findAll("img"):
print "Image: %(src)s" % image
filename = image["src"].split("/")[-1]
parsed[2] = image["src"]
outpath = os.path.join(out_folder, filename)
if image["src"].lower().startswith("http"):
urlretrieve(image["src"], outpath)
else:
urlretrieve(urlparse.urlunparse(parsed), outpath)
def _usage():
print "usage: python dumpimages.py http://example.com [outpath]"
if __name__ == "__main__":
url = sys.argv[-1]
out_folder = "/test/"
if not url.lower().startswith("http"):
out_folder = sys.argv[-1]
url = sys.argv[-2]
if not url.lower().startswith("http"):
_usage()
sys.exit(-1)
main(url, out_folder)
Editar: Puede especificar la carpeta de salida ahora.
'abrir (..). Escribir (urlopen (..)' podría reemplazarse por 'urllib.urlretrieve()' – jfs
Gracias por señalarlo Código editado para reflejar –
Su código falla si las ubicaciones de las imágenes se especifican en relación con el documento HTML. ¿Puede incluir la [corrección proporcionada por unutbu] (http://stackoverflow.com/questions/8660419/script-doesnt-download-large-images#answer-8661004) en caso de que alguien utilice su secuencia de comandos en el futuro? –
Tienes que descargar la página y analizar el documento html, buscar tu imagen con expresiones regulares y descargarla .. Puedes usar urllib2 para descargar y Beautiful Soup para analizar archivos html.
Use htmllib para extraer todas las etiquetas img (invalidar do_img), luego use urllib2 para descargar todas las imágenes.
Esto supone html no roto, que Beautiful Soup puede manejar. –
Por otro lado, esto está utilizando solo módulos de biblioteca estándar. – tzot
Y esta es la función de una imagen descarga para:
def download_photo(self, img_url, filename):
file_path = "%s%s" % (DOWNLOADED_IMAGE_PATH, filename)
downloaded_image = file(file_path, "wb")
image_on_web = urllib.urlopen(img_url)
while True:
buf = image_on_web.read(65536)
if len(buf) == 0:
break
downloaded_image.write(buf)
downloaded_image.close()
image_on_web.close()
return file_path
funciona bien para al eliminar el ciclo 'while' (no su contenido) – Ron
solución de Ryan es bueno, pero no si las URL fuente de la imagen son las direcciones URL absolutas o cualquier cosa que no dan un buen resultado cuando simplemente se concatena a la URL de la página principal. urljoin reconoce absoluta frente a los URL relativos, por lo que reemplazar el bucle en el medio con:
for image in soup.findAll("img"):
print "Image: %(src)s" % image
image_url = urlparse.urljoin(url, image['src'])
filename = image["src"].split("/")[-1]
outpath = os.path.join(out_folder, filename)
urlretrieve(image_url, outpath)
+1 for' urlparse.urljoin() ' –
Si la petición necesita una autorización se refieren a éste:
r_img = requests.get(img_url, auth=(username, password))
f = open('000000.jpg','wb')
f.write(r_img.content)
f.close()
- 1. Descargar la página html y su contenido
- 2. Descargar la imagen de la URL usando el código php?
- 3. Descargar html en python?
- 4. Descargar CSS de la página web
- 5. Convierte el archivo .html a la imagen
- 6. Obteniendo el código fuente de HTML de la página actual desde la extensión de cromo
- 7. Detección de color de imagen usando Python
- 8. Descargar archivo dentro de WebView
- 9. Reemplazar la cadena fuente html de MS Outlook usando regex?
- 10. Descargar contenido de la página utilizando ajax jquery
- 11. extraer la imagen del carácter de fuente del archivo ttf
- 12. Llamada de evento antes de descargar la página
- 13. código de Google descargar fuente
- 14. ¿Dónde puedo descargar la fuente de la utilidad cron?
- 15. Especificando las dimensiones de la imagen en HTML vs CSS para la carga de la página
- 16. Manejo de sesión en la página HTML usando JavaScript
- 17. Cómo cifrar la salida del código fuente HTML usando PHP
- 18. Descargar un archivo usando Javascript
- 19. Renderizar página web a la imagen
- 20. conseguir la fuente de la página web con el HTML representado desde JavaScript
- 21. ¿Cómo puedo recuperar el título de la página de una página web usando Python?
- 22. (cómo) puedo descargar una imagen usando JSoup?
- 23. Página AJAX Descargar progreso
- 24. ¿Cómo obtener la fuente html de una página desde un enlace html en android?
- 25. Recortar la imagen usando PIL en python
- 26. Selector de directorio en la página HTML
- 27. Descargar el archivo pdf de la wikipedia
- 28. ¿descargar archivo zip usando java?
- 29. Html a la imagen en javascript o python
- 30. Descargar archivo usando libcurl en C/C++
Y ¿cuál es la pregunta? –
"¿Cómo puedo% s%% title –