如何使用Python保存"完整网页"而不仅仅是基本的html

20 html python urllib urllib2 python-2.7

我使用以下代码来使用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')
Run Code Online (Sandbox Code Playgroud)

问题:此代码将html保存为基本的html,没有javascripts,图像等.我想将网页保存为完整(就像我们在浏览器中有选项一样)

更新:我现在使用以下代码来保存webapge的所有js/images/css文件,以便它可以保存为完整的网页,但我的输出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()
Run Code Online (Sandbox Code Playgroud)

roo*_*oot 20

尝试使用selenium模拟您的浏览器.该脚本将弹出save as该网页的对话框.您仍然需要弄清楚如何模拟按下输入以便下载,因为文件对话框超出了selenium的范围(您如何操作也取决于操作系统).

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()
Run Code Online (Sandbox Code Playgroud)

另外我认为遵循@Amber关于抓取链接资源的建议可能更简单,因此是更好的解决方案.尽管如此,我认为使用selenium是一个很好的起点,因为br.page_source它将为您提供整个dom以及javascript生成的动态内容.

  • 触发Ctrl + S后如何点击"保存"按钮? (3认同)
  • @geogeogeo @user2262504 只需按 Enter 键即可保存: `save_me = ActionChains(driver).key_down(Keys.ENTER).key_up(Keys.ENTER) save_me.perform()` (2认同)
  • 由于大多数 JS 下载都是异步的,具体取决于您的网站,您可能必须在“get()”请求之后包含一个慷慨的“time.sleep(x)”值,然后“br.page_source”才会包含您的内容重新寻找! (2认同)

raj*_*788 5

您可以使用简单的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)
Run Code Online (Sandbox Code Playgroud)

您将在download_folder中拥有html,css,js。完全像原始站点一样工作。