返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用Python自动下载网站所有文件
  • 947
分享到

如何使用Python自动下载网站所有文件

2023-06-14 07:06:42 947人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家分享的是有关如何使用python自动下载网站所有文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。假如一个网站,里面有很多链接,有指向文件的,有指向新链接的,新的链接点击进去后,仍然是有指向文件的,

这篇文章给大家分享的是有关如何使用python自动下载网站所有文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

如何使用Python自动下载网站所有文件

假如一个网站,里面有很多链接,有指向文件的,有指向新链接的,新的链接点击进去后,仍然是有指向文件的,有指向新链接的,类似一个文件夹,里面即有文件,又有目录,目录中又有文件和目录。如何从这样的网站上下载所有的文件,并按网站的目录结构来保存这些文件呢?

关键词:Python、下载、正则表达式递归

按照自顶向下来设计程序,我们整理自己的思路,然后使用 Python 语言来翻译下即可。

思路:由于目录的深度不固定,也不可能穷举,且每一个目录的处理方式和子目录父目录的处理流程都是一样的,因此我们可以使用递归来下载所有文件。

递归代码必须要有退出条件,退出条件要放在前面,本例中的递归退出条件就是:如果是文件就下载,下载完递归函数即完成任务。

总体思路:

给定一个 url,判断是否是文件,如果是文件,下载即可,然后函数结束。

如果给定 url 不是文件,那么访问该 url,并获取它下面的所有链接。

遍历步骤 2 产生的所有链接,递归的执行步骤 1 和 2,直到程序运行结束。

以上思路,用代码描述如下:

import urllib.requestimport requestsimport re, osdef get_file(url): ''' 递归下载网站的文件 :param url: :return: ''' if isFile(url):  print(url)  try:   download(url)  except:   pass else:  urls = get_url(url)  for u in urls:   get_file(u)

前面导入的包在接下来函数中会用到,下面就是逐渐层向下,实现子功能。

判断链接是否指向文件:

这里总结 url 规律,很容易写出。

def isFile(url): ''' 判断一个链接是否是文件 :param url: :return: ''' if url.endswith('/'):  return False else:  return True

下载文件:

下载文件时要从 url 中获取文件应该存储的位置,并使用 os.makedirs 来创建多级目录。然后使用 urllib.request.urlretrieve 来下载文件。

def download(url): ''' :param url:文件链接 :return: 下载文件,自动创建目录 ''' full_name = url.split('//')[-1] filename = full_name.split('/')[-1] dirname = "/".join(full_name.split('/')[:-1]) if os.path.exists(dirname):  pass else:  os.makedirs(dirname, exist_ok=True) urllib.request.urlretrieve(url, full_name)

获取 url 下的所有链接:

这里要具体网站具体分析,看看如何使用正则表达式获取网页中的链接,这样的正则表达式可以说是再简单不过了。

def get_url(base_url): ''' :param base_url:给定一个网址 :return: 获取给定网址中的所有链接 ''' text = '' try:  text = requests.get(base_url).text except Exception as e:  print("error - > ",base_url,e)  pass reg = '<a href="(.*)" rel="external nofollow" >.*</a>' urls = [base_url + url for url in re.findall(reg, text) if url != '../'] return urls

这里有个小坑,就是网站有个链接是返回上级页面的,url 的后辍是 '../' 这样的链接要去掉,否则递归函数就限入了死循环。

接下来就是写主函数,执行任务了,慢慢等它下载完吧。

if __name__ == '__main__': get_file('https://file.wikileaks.org/file/')

其实,还会存两个问题:

假如网站某页有个链接它指向了首页,那么递归程序仍然会限入一个死循环,解决方法就是将访问过的 url 保存在一个列表里(或者其他数据结构),如果接下来要访问的 url 不在此列表中,那么就访问,否则就忽略。

如果下载的过程中程序突然报错退出了,由于下载文件较慢,为了节约时间,那么如何让程序从报错处继续运行呢?这里可采用分层递归,一开始时先获取网站的所有一级 url 链接,顺序遍历这些一级 url 链接,执行上述的 get_file(url) ,每访问一次一级 url 就将其索引位置加1(索引位置默认为0,存储在文件中或数据库中),程序中断后再运行时先读取索引,然后从索引处开始执行即可。另外,每下载成功一个文件,就把对应的 url 也保存在文件中或数据库中,如果一级 url 下的链接已经下载过文件,那么就不需要重新下载了。

感谢各位的阅读!关于“如何使用Python自动下载网站所有文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 如何使用Python自动下载网站所有文件

本文链接: https://lsjlt.com/news/268898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用Python自动下载网站所有文件
    这篇文章给大家分享的是有关如何使用Python自动下载网站所有文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。假如一个网站,里面有很多链接,有指向文件的,有指向新链接的,新的链接点击进去后,仍然是有指向文件的,...
    99+
    2023-06-14
  • 用Python自动下载网站所有文件
    目录总体思路: 判断链接是否指向文件: 下载文件: 获取 url 下的所有链接: 最近维基 jie mi 彻底公开了网站的全部文件,我就在想如何使用 Python 将其下载到本地永久...
    99+
    2024-04-02
  • python如何爬取自动下载网页音频文件
    小编给大家分享一下python如何爬取自动下载网页音频文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python是什么意思Python是一种跨平台的、具有解释...
    99+
    2023-06-14
  • golang 如何自动下载所有依赖包
    如何自动下载所有依赖包? 大部分情况下大家下载 Go 项目都是使用go get命令,它除了会下载指定的项目代码,还会去下载这个项目所依赖的所有项目。 但是有的时候我们的项目由于各种原...
    99+
    2024-04-02
  • python如何读取文件夹下所有文件
    你可以使用os模块的listdir函数列出文件夹下的所有文件,然后使用循环逐个读取文件。 以下是一个示例代码: import os ...
    99+
    2024-02-29
    python
  • python 如何使用requests下载文件
    目录使用requests下载文件1、获取token,或者session2、获取下载路径3、根据下载路径拼接下载url用requests.get下载文件不知道大家有没有遇到这样的问题使...
    99+
    2024-04-02
  • python如何使用urllib.request下载文件
    这篇文章主要为大家展示了“python如何使用urllib.request下载文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用urllib.request下载文件”这篇文章...
    99+
    2023-06-17
  • python如何使用requests下载文件
    这篇文章主要介绍了python如何使用requests下载文件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。requests可以返回HTTP的meta信息。import&nb...
    99+
    2023-06-17
  • python怎么移动文件夹下所有文件
    在Python中,可以使用`shutil`模块来移动文件夹下的所有文件。具体的步骤如下:1. 导入`shutil`模块:`impor...
    99+
    2023-08-15
    python
  • python使用wget下载网络文件
    wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。ubuntu 安装wgetpip install wget从网络或本地硬盘下载文件(并解压)# -*- coding: utf-8...
    99+
    2023-01-31
    文件 网络 python
  • python实现自动下载sftp文件
    本文实例为大家分享了python实现自动下载sftp文件的具体代码,供大家参考,具体内容如下 实现功能:利用python自动连接sftp,并下载sftp中指定目录下的所有目录及文件 ...
    99+
    2024-04-02
  • Python中怎么自动下载文件
    本篇文章给大家分享的是有关Python中怎么自动下载文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。import os   import&nbs...
    99+
    2023-06-17
  • 如何使用FTP命令批量自动下载bat文件
    这篇文章主要介绍“如何使用FTP命令批量自动下载bat文件”,在日常操作中,相信很多人在如何使用FTP命令批量自动下载bat文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用FTP命令批量自动下载ba...
    99+
    2023-06-09
  • Python如何实现邮件自动下载
    本篇内容介绍了“Python如何实现邮件自动下载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开始码代码之前,我们先来了解一下三种邮件服务协...
    99+
    2023-07-02
  • python如何使用wget工具下载文件
    小编给大家分享一下python如何使用wget工具下载文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!wgetwget是Linux下的一个命令行下载工具,在Py...
    99+
    2023-06-17
  • 如何编写ftp自动下载文件脚本
    这篇文章主要讲解了“如何编写ftp自动下载文件脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写ftp自动下载文件脚本”吧!代码如下:cd /home/oracle/ftpdatas...
    99+
    2023-06-08
  • go自动下载所有的依赖包go module使用详解
    今天在学习dubbo-go的时候,下载了dubbo-go的example,依赖的包太多了,之前都是手动下载某个依赖的包,现在手动一个一个 go get 那太麻烦了。因为我是搞j...
    99+
    2022-06-07
    module GO
  • 如何使用ByteArrayOutputStream下载文件
    目录使用ByteArrayOutputStream下载文件使用POI导出数据,然后将其下载使用ByteArrayOutputStream解决IO乱码说下经过小结一下使用ByteArr...
    99+
    2024-04-02
  • 如何使用vbs下载文件
    这篇文章主要讲解了“如何使用vbs下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用vbs下载文件”吧!说到使用vbs下载文件是不是想到了XMLHTTP呢,呵呵,以下是比较经典的...
    99+
    2023-06-08
  • 如何使用Python抓取和优化所有网站图像
    目录要求和假设安装模块导入 Python 模块启动网络爬网规范化和修剪爬网数据创建输出文件夹处理图像的网址流程映像优化图像结论我发布了一个通过FTP自动优化新图像的教程。这次我们将抓...
    99+
    2023-02-24
    Python 抓取和优化所有网站图像 Python 抓取网站图像
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作