使用Python的网站下载程序

使用Python的网站下载程序,python,web-crawler,Python,Web Crawler,我正在尝试使用python创建一个网站下载程序。我有以下代码: 从页面查找所有URL 下载给定的URL 我要做的是递归下载一个页面,如果该页面中有任何其他链接,我也需要下载它们。我试着结合上面两个函数,但递归的东西不起作用 代码如下所示: (一) 2) 其中下载(url)功能定义如下: *def download(url): import urllib webFile = urllib.urlopen(url) localFile = open(url.split('/'

我正在尝试使用python创建一个网站下载程序。我有以下代码:

  • 从页面查找所有URL

  • 下载给定的URL

  • 我要做的是递归下载一个页面,如果该页面中有任何其他链接,我也需要下载它们。我试着结合上面两个函数,但递归的东西不起作用

    代码如下所示:

    (一)

    2) 其中下载(url)功能定义如下:

    *def download(url):
        import urllib
        webFile = urllib.urlopen(url)
        localFile = open(url.split('/')[-1], 'w')
        localFile.write(webFile.read())
        webFile.close()
        localFile.close()
        a=raw_input("Enter the URL")
        download(a)
        print "Done"*
    

    请帮助我如何将这两个代码结合起来,以“递归方式”下载正在下载的网页上的新链接。

    通常,想法如下:

    def get_links_recursive(document, current_depth, max_depth):
        links = document.get_links()
        for link in links:
            downloaded = link.download()
            if current_depth < max_depth:
                get_links_recursive(downloaded, depth-1, max_depth)
    
    def get_links_recursive(文档、当前深度、最大深度):
    links=文档。获取链接()
    对于链接中的链接:
    下载=link.download()
    如果当前深度<最大深度:
    获取递归链接(下载,深度1,最大深度)
    

    调用get\u links\u recursive(文档,0,3)开始工作。

    通常,想法如下:

    def get_links_recursive(document, current_depth, max_depth):
        links = document.get_links()
        for link in links:
            downloaded = link.download()
            if current_depth < max_depth:
                get_links_recursive(downloaded, depth-1, max_depth)
    
    def get_links_recursive(文档、当前深度、最大深度):
    links=文档。获取链接()
    对于链接中的链接:
    下载=link.download()
    如果当前深度<最大深度:
    获取递归链接(下载,深度1,最大深度)
    

    调用get\u links\u recursive(文档,0,3)开始操作。

    您可能需要查看库


    这样的任务将变得非常简单,并允许您同时下载多个页面。

    您可能需要查看库

    done_url = []
    def download(url):
        if url in done_url:return
        ...download url code...
        done_url.append(url)
        urls = sone_function_to_fetch_urls_from_this_page()
        for url in urls:download(url)
    
    这样的任务将变得非常简单,并允许您同时下载多个页面

    done_url = []
    def download(url):
        if url in done_url:return
        ...download url code...
        done_url.append(url)
        urls = sone_function_to_fetch_urls_from_this_page()
        for url in urls:download(url)
    
    这是一个非常糟糕的代码。例如,您需要检查url是否在您想要爬网的域内。但是,您要求递归

    注意递归的深度

    我的解决方案有很多问题P

    你必须尝试一些像Scrapy之类的爬行图书馆

    这是一个非常糟糕的代码。例如,您需要检查url是否在您想要爬网的域内。但是,您要求递归

    注意递归的深度

    我的解决方案有很多问题P


    您必须尝试一些爬行库,如Scrapy或其他东西。

    这正是如何触发堆栈溢出的方法,它将递归地触发一个问题,并最终结束整个世界。同意,他还需要对爬行何时停止进行限制,最好是限制爬行的级别数。我将编辑答案。这正是如何触发堆栈溢出的,它将递归地触发一个问题,并最终结束整个宇宙。同意,他还需要增加爬行何时停止的限制,最好是通过限制爬行的级别数。我将编辑答案。您确定要编写自己的答案,而不是简单地使用
    wget
    ?您确定要编写自己的答案,而不是简单地使用
    wget