26

次のコードを使用して、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 ページを完全なものとして保存したい (ブラウザにオプションがあるように)

更新: 次のコードを使用して 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()
4

3 に答える 3

22

ブラウザをseleniumでエミュレートしてみてください。save asこのスクリプトは、Web ページのダイアログをポップアップ表示します。ファイルダイアログが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 全体を取得できるので、セレンを使用することは良い出発点だと思います。

于 2013-01-25T07:43:01.257 に答える