首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Python保存“完整的网页”而不仅仅是基本的html

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

Stack Overflow用户
提问于 2013-01-25 14:34:28
回答 3查看 30.9K关注 0票数 26

我使用以下代码来使用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')

Problem:这段代码将html保存为基本的html,没有javascripts,图像等。我想将网页保存为完整的(就像我们在浏览器中有选项)。

更新:我现在使用下面的代码来保存webapge的所有js/image/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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-25 15:43:01

尝试用selenium模拟您的浏览器。此脚本将弹出网页的save as对话框。您仍然需要弄清楚如何模拟按enter键以启动下载,因为文件对话框不在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()

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

票数 22
EN

Stack Overflow用户

发布于 2018-07-26 21:04:20

您可以使用简单的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)

你将在你的download_folder中拥有html,css,js。完全像原来的网站一样工作。

票数 10
EN

Stack Overflow用户

发布于 2019-12-26 12:39:44

要让@rajatomar788运行上面的脚本,我必须首先执行以下所有导入操作:

要运行pywebcopy,您需要安装以下软件包:

pip install pywebcopy 
pip install pyquery
pip install w3lib
pip install parse 
pip install lxml

在那之后,它出现了一些错误,但我确实得到了一个文件夹,里面装满了组成网页的文件。

webpage    - INFO     - Starting save_assets Action on url: 'http://www.gatsby.ucl.ac.uk/teaching/courses/ml1-2016.html'
webpage    - Level 100 - Queueing download of <89> asset files.
Exception in thread <Element(LinkTag, file:///++resource++images/favicon2.ico)>:
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\ProgramData\Anaconda3\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pywebcopy\elements.py", line 312, in run
    super(LinkTag, self).run()
  File "C:\ProgramData\Anaconda3\lib\site-packages\pywebcopy\elements.py", line 58, in run
    self.download_file()
  File "C:\ProgramData\Anaconda3\lib\site-packages\pywebcopy\elements.py", line 107, in download_file
    req = SESSION.get(url, stream=True)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pywebcopy\configs.py", line 244, in get
    return super(AccessAwareSession, self).get(url, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 640, in send
    adapter = self.get_adapter(url=request.url)
  File "C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py", line 731, in get_adapter
    raise InvalidSchema("No connection adapters were found for '%s'" % url)
requests.exceptions.InvalidSchema: No connection adapters were found for 'file:///++resource++images/favicon2.ico'

webpage    - INFO     - Starting save_html Action on url: 'http://www.gatsby.ucl.ac.uk/teaching/courses/ml1-2016.html'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14516590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档