2013-01-25 44 views
17

का उपयोग कर रहा अजगर का उपयोग कर वेब पेज को बचाने के लिए निम्नलिखित कोड का उपयोग कर रहा:को बचाने के लिए कैसे "पूरा वेबपेज" न सिर्फ बुनियादी एचटीएमएल अजगर

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

समस्या: इस कोड की बचत होती है एचटीएमएल मूल HTML के रूप में बिना javascripts, छवियों आदि । मैं (जैसे हम ब्राउज़र में विकल्प होता है) के रूप में पूरा वेबपेज सहेजना चाहते

अद्यतन: मैं इतना है कि यह रूप में बचाया जा सकता है सभी js/images/सीएसएस webapge की फ़ाइलों को सहेजने के लिए निम्न कोड का उपयोग कर रहा अब पूरा वेबपेज लेकिन अभी भी मेरा आउटपुट एचटीएमएल है मूल 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() 
+1

फिर आपको HTML को पार्स करने के लिए कोड लिखना होगा, सभी लिंक किए गए संसाधनों को पकड़ना होगा, और ब्राउज़र की तरह ही उन्हें व्यक्तिगत रूप से डाउनलोड करना होगा। सुंदर सूप का उपयोग कर – Amber

+0

क्या मैं ऐसा कर सकता हूं? –

+2

कोशिश करें [स्केपर] (http://scrapy.org/), एक ओपन सोर्स पोर्टेबल पायथन वेब स्क्रैपिंग फ्रेमवर्क – Abhijit

उत्तर

17

कोशिश selenium के साथ अपने ब्राउज़र की नकल। यह स्क्रिप्ट वेबपृष्ठ के लिए save as संवाद पॉप अप करेगा। आपको अभी भी यह पता लगाना होगा कि फ़ाइल डायलॉग सेलेनियम की पहुंच से बाहर है (आप यह कैसे करते हैं यह ओएस आश्रित भी है) के रूप में शुरू करने के लिए डाउनलोड करने के लिए दबाव डालने का अनुकरण करना है।

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 आपको जावास्क्रिप्ट द्वारा उत्पन्न गतिशील सामग्री के साथ संपूर्ण डोम प्राप्त करेगा।

+0

यह कोड मुझे 'WindowsError दे रहा है: [त्रुटि 2] सिस्टम निर्दिष्ट फ़ाइल नहीं ढूंढ सकता है' त्रुटि –

+0

@atams - आपको किस पंक्ति में त्रुटि मिल रही है? मैंने कोशिश की और यह मेरी मशीन पर काम किया ... – root

+0

मुझे इस लाइन में त्रुटि मिल रही है: 'br = webdriver.Firefox()', क्या ऐसा इसलिए है क्योंकि मैं फ़ायरफ़ॉक्स के पोर्टेबल संस्करण का उपयोग कर रहा हूं? –