2015-07-03 64 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。 –