2013-01-25 29 views
17

Tôi đang sử dụng đoạn mã sau để lưu trang web bằng Python:Làm thế nào để tiết kiệm "hoàn thành trang web" không chỉ là html cơ bản sử dụng 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') 

Vấn đề: Mã này tiết kiệm html như html cơ bản mà không javascripts, hình ảnh vv . tôi muốn lưu trang web dưới dạng đầy đủ (Giống như chúng ta có tùy chọn trong trình duyệt)

cập nhật: tôi đang sử dụng đoạn mã sau tại để lưu tất cả các js/images/file css của webapge để nó có thể được lưu lại dưới dạng trang web hoàn chỉnh nhưng vẫn là html đầu ra của tôi được lưu như html cơ bản:

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

Sau đó, bạn sẽ phải viết mã để phân tích cú pháp HTML, lấy tất cả các tài nguyên được liên kết và tải chúng riêng lẻ, giống như trình duyệt. – Amber

+0

sử dụng súp đẹp tôi có thể làm điều đó? –

+2

Hãy thử [Scrapy] (http://scrapy.org/), một khung công tác xóa web di động Python nguồn mở – Abhijit

Trả lời

17

Thử mô phỏng trình duyệt của bạn với selenium. Tập lệnh này sẽ bật lên hộp thoại save as cho trang web. Bạn sẽ vẫn phải tìm ra cách mô phỏng nhấn enter để tải xuống để bắt đầu khi hộp thoại tập tin nằm ngoài tầm với của selen (cách bạn thực hiện nó cũng phụ thuộc vào hệ điều hành).

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

Ngoài ra tôi nghĩ rằng sau @Amber gợi ý của grabbing các tài nguyên liên kết có thể là một, vì vậy một giải pháp tốt hơn đơn giản hơn. Tuy nhiên, tôi nghĩ rằng việc sử dụng selen là một điểm khởi đầu tốt vì br.page_source sẽ giúp bạn có được toàn bộ dom cùng với nội dung động được tạo bởi javascript.

+0

Mã này cho tôi 'WindowsError: [Lỗi 2] Hệ thống không thể tìm thấy tệp được chỉ định' lỗi –

+0

@atams - Bạn nhận được lỗi nào trên dòng nào? Tôi đã thử nó ra và nó làm việc trên máy tính của tôi ... – root

+0

Tôi nhận được lỗi trong dòng này: 'br = webdriver.Firefox()', Có phải vì tôi đang sử dụng phiên bản di động của firefox? –