web-dev-qa-db-ja.com

Python

次のコードを使用して、PythonでWebページを保存しています。

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

問題:このコードは、JavaScriptや画像などなしでHTMLを基本的なHTMLとして保存します。Webページを完全な状態で保存したい(ブラウザにオプションがあるように)

pdate:次のコードを使用して、webapgeのすべてのjs/images/cssファイルを保存しているため、完全なWebページとして保存できますが、出力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()
21
user1915050

Selenium でブラウザをエミュレートしてみてください。このスクリプトは、Webページのsave asダイアログをポップアップします。ファイルダイアログがSeleniumの手の届かない範囲にあるため、ダウンロードのためにEnterキーを押して開始をエミュレートする方法を理解する必要があります(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()

また、リンクされたリソースを取得する@ Amberの提案に従うと、より簡単になり、より良い解決策になると思います。それでも、br.page_sourceを使用すると、Javascriptによって生成された動的コンテンツとともにdom全体を取得できるので、Seleniumを使用することをお勧めします。

18
root

あなたは簡単なpython library 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がすべてdownload_folderにあります。元のサイトのように完全に機能します。

5
rajatomar788