2015-07-03 92 views
1

目前我有一個程序只能下載給定頁面的HTML。現在我想要一個可以下載網頁的所有文件的程序,包括HTML,CSS,JS和圖像文件(與我們在任何網站的ctrl-s上獲得的相同)。如何通過Python程序下載完整的網頁?

我目前的計劃是:

import urllib 
urllib.urlretrieve ("https://en.wikipedia.org/wiki/Python_%28programming_language%29", "t3.html") 

我曾參觀過在堆棧溢出很多這樣的問題,但他們都只是下載HTML文件。

+0

因此,您想要瀏覽HTML中的鏈接並下載它們指向的內容?請注意,維基百科頁面包含指向其他頁面的鏈接;你想這樣做遞歸? – jonrsharpe

+0

是的,我想要下載主鏈接中的所有鏈接以及他們的CSS和js文件。 –

+0

或者只是告訴我如何只下載一個給定頁面的css和js文件 –

回答

3

以下實現使您能夠獲取子HTML網站。爲了獲得您需要的其他文件,可以進行更多的開發。我坐在depth變量爲您設置您要解析的最大sub_websites。

import urllib2 
from BeautifulSoup import * 
from urlparse import urljoin 


def crawl(pages, depth=None): 
    indexed_url = [] # a list for the main and sub-HTML websites in the main website 
    for i in range(depth): 
     for page in pages: 
      if page not in indexed_url: 
       indexed_url.append(page) 
       try: 
        c = urllib2.urlopen(page) 
       except: 
        print "Could not open %s" % page 
        continue 
       soup = BeautifulSoup(c.read()) 
       links = soup('a') #finding all the sub_links 
       for link in links: 
        if 'href' in dict(link.attrs): 
         url = urljoin(page, link['href']) 
         if url.find("'") != -1: 
           continue 
         url = url.split('#')[0] 
         if url[0:4] == 'http': 
           indexed_url.append(url) 
     pages = indexed_url 
    return indexed_url 


pagelist=["https://en.wikipedia.org/wiki/Python_%28programming_language%29"] 
urls = crawl(pagelist, depth=2) 
print urls 
1

嘗試Python庫Scrapy。您可以編程Scrapy以遞歸方式掃描網站,通過下載其網頁,掃描以下鏈接:

一個開源和協作框架,用於從網站提取您需要的數據。以一種快速,簡單但可擴展的方式。

+0

謝謝@ barny,但你能告訴它可以使用beautifulSoup lib或HTTP請求bcoz實現它我有一些知識。 –

+0

天哪,我的答案已修改。閱讀python,err,Python庫Scrapy文檔,例如FAQ作爲其第一個答案:Scrapy提供了一種用於提取數據的內置機制(稱爲選擇器),但您可以輕鬆使用BeautifulSoup(或lxml)。 http://doc.scrapy.org/en/1.0/faq.html – barny

+0

好的,讓我先看看scrapy doc。 –