Подтвердить что ты не робот

Как сохранить "полную веб-страницу" не только базовый html с помощью Python

Я использую следующий код для сохранения веб-страницы с помощью 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')

Проблема. Этот код сохраняет html в качестве базового html без javascripts, изображений и т.д. Я хочу сохранить веб-страницу как полную (например, у нас есть опция в браузере)

Обновление: Теперь я использую следующий код, чтобы сохранить все файлы js/images/css для webapge, чтобы его можно было сохранить как полную веб-страницу, но все же мой выходной html получает сохранение как базовый html:

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

Ответ 1

Попробуйте подражать вашему браузеру с помощью selenium. Этот script отобразит диалоговое окно save as для веб-страницы. Вам все равно придется выяснить, как эмулировать нажатие кнопки ввода для загрузки, поскольку диалог с файлом выходит за пределы селена (как вы это делаете, также зависит от ОС).

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

Также я думаю, что следующее предложение @Amber о захвате связанных ресурсов может быть более простым, таким образом, лучшим решением. Тем не менее, я думаю, что использование селена - хорошая отправная точка, так как br.page_source предоставит вам весь дом вместе с динамическим контентом, созданным javascript.

Ответ 2

Вы можете легко сделать это с помощью простой библиотеки Python Pywebcopy.

Для текущей версии: 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)

Вы будете иметь HTML, CSS, JS все в вашей папке для скачивания. Полностью работает как оригинальный сайт.