Comment sauvegarder "complete webpage" pas seulement du html de base en utilisant Python

j'utilise le code suivant pour sauvegarder la page Web en utilisant 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')

Problème: ce code sauve html comme html de base sans javascripts, images etc. Je veux enregistrer la page web complète (Comme nous avons l'option dans le navigateur)

mise à Jour: J'utilise maintenant le code suivant pour enregistrer tous les fichiers js / images/css de webapge afin qu'il puisse être enregistré en tant que page web complète, mais ma sortie html est en train d'être enregistrée comme html de base:

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()
19
demandé sur Ross Smith II 2013-01-25 10:34:28

2 réponses

essayez d'émuler votre navigateur avec sélénium. Ce script fera apparaître le save as dialogue pour la page web. Vous devrez tout de même trouver comment émuler la pression sur Entrée pour le téléchargement, car la boîte de dialogue Fichier n'est pas à la portée de sélénium (la façon dont vous le faites dépend aussi de L'OS).

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()

je pense Également que suivant @Orange suggestion d'accaparer les ressources liées peut être une solution plus simple, donc meilleure. Pourtant, je pense que l'utilisation du sélénium est bon point de départ br.page_source vous fournira la totalité du dom ainsi que le contenu dynamique généré par javascript.

18
répondu root 2016-11-22 17:16:07

vous pouvez facilement faire cela avec une simple bibliothèque python 'pywebcopy'


import pywebcopy

pywebcopy.core.save_webpage('http://www.vodafone.de/privat/tarife/red-smartphone-tarife.html')

Fait!

Vous aurez votre page web complète dans le dossier suivant

C:\WebCopyProjects\vodafone.de\

Vous pouvez choisir de modifier cet emplacement en passant mirrors_dir='your-choice-locationinit appel.. Ex.

from pywebcopy.core import save_webpage

save_webpage(
url = 'http://your-site.com/',
mirrors_dir = 'your-choice-location`
)

Vous aurez html, css, js tout à votre choix de localisation. Fonctionne complètement comme le site d'origine..

1
répondu rajatomar788 2018-08-21 13:16:10