Cómo guardar “página web completa” no solo html básico utilizando Python

Estoy usando el siguiente código para guardar la página web usando Python:

import urllib import sys from bs4 import BeautifulSoup url = 'http://www.vodafone.de/privat/tarife/red-smartphone-tarife.html' f = urllib.urlretrieve(url,'test.html') 

Problema : este código guarda html como html básico sin javascripts, imágenes, etc. Quiero guardar la página web como completa (como tenemos la opción en el navegador)

Actualización : estoy usando el siguiente código ahora para guardar todos los archivos js / images / css de webapge para que pueda guardarse como una página web completa, pero aún así mi código HTML de salida se guarda como HTML básico:

 import pycurl import StringIO c = pycurl.Curl() c.setopt(pycurl.URL, "http://www.vodafone.de/privat/tarife/red-smartphone-tarife.html") b = StringIO.StringIO() c.setopt(pycurl.WRITEFUNCTION, b.write) c.setopt(pycurl.FOLLOWLOCATION, 1) c.setopt(pycurl.MAXREDIRS, 5) c.perform() html = b.getvalue() #print html fh = open("file.html", "w") fh.write(html) fh.close() 

Intenta emular tu navegador con selenium . Este script abrirá el cuadro de diálogo save as para la página web. Aún tendrá que descubrir cómo emular al presionar enter para que la descarga comience, ya que el cuadro de diálogo del archivo está fuera del scope de Selenium (cómo lo hace también depende del sistema operativo).

 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys br = webdriver.Firefox() br.get('http://www.google.com/') save_me = ActionChains(br).key_down(Keys.CONTROL)\ .key_down('s').key_up(Keys.CONTROL).key_up('s') save_me.perform() 

También creo que seguir la sugerencia de @Amber de agarrar los recursos vinculados puede ser una solución más simple, por lo tanto, mejor. Aún así, creo que usar selenium es un buen punto de partida, ya que br.page_source te proporcionará toda la dom junto con el contenido dynamic generado por javascript.

Puede hacerlo fácilmente con pywebcopy de la biblioteca python simple.

Para la versión actual: 5.0.1

 from pywebcopy import save_webpage url = 'http://some-site.com/some-page.html' download_folder = '/path/to/downloads/' kwargs = {'bypass_robots': True, 'project_name': 'recognisable-name'} save_webpage(url, download_folder, **kwargs) 

Tendrá html, css, js en su carpeta de descargas. Completamente trabajando como sitio original.