在日常科研或者工作中,我们免不了要批量从网上下载一些资料。要是手工一个个去下载,浪费时间又让鼠标折寿,好不容易点完了发现手指都麻木了。

这种重复性的批量作业我们应该交给python小弟去帮我们搞定,这篇文章汇总了用python下载文件的若干种方法,快点学起来吧。

1. 下载图片import requests

url = 'https://www.python.org/static/img/python-logo@2x.png'

myfile = requests.get(url)

open('PythonImage.png', 'wb').write(myfile.content)

用wget:import wget

url = "https://www.python.org/static/img/python-logo@2x.png"

wget.download(url, 'pythonLogo.png')

requests是python实现的简单易用的HTTP库。requests[1]标准模板:import requests

url="******"

try:

r=requests.get(url)

r.raise_for_status() #如果不是200,产生异常requests.HTTPError

r.encoding=r.apparent_encoding

print(r.text)

except:

print("爬取失败...")

2. 下载重定向的文件import requests

url = 'https://readthedocs.org/projects/python-guide/downloads/pdf/latest/'

myfile = requests.get(url, allow_redirects=True)

open('hello.pdf', 'wb').write(myfile.content)

3. 分块下载大文件import requests

url = 'https://buildmedia.readthedocs.org/media/pdf/python-guide/latest/python-guide.pdf'

r = requests.get(url, stream = True)

with open("PythonBook.pdf", "wb") as Pypdf:

for chunk in r.iter_content(chunk_size = 1024): # 1024 bytes

if chunk:

Pypdf.write(chunk)

4. 并行下载多文件

不并行版本:import os

import requests

from time import time

from multiprocessing.pool import ThreadPool

def url_response(url):

path, url = url

r = requests.get(url, stream=True)

with open(path, 'wb') as f:

for ch in r:

f.write(ch)

urls = [("Event1", "https://www.python.org/events/python-events/805/"),

("Event2", "https://www.python.org/events/python-events/801/"),

("Event3", "https://www.python.org/events/python-events/790/"),

("Event4", "https://www.python.org/events/python-events/798/"),

("Event5", "https://www.python.org/events/python-events/807/"),

("Event6", "https://www.python.org/events/python-events/807/"),

("Event7", "https://www.python.org/events/python-events/757/"),

("Event8", "https://www.python.org/events/python-user-group/816/")]

start = time()

for x in urls:

url_response(x)

print(f"Time to download: {time() - start}")

# Time to download: 7.306085824966431

并行版本,只需改动一行代码ThreadPool(9).imap_unordered(url_response, urls),时间会大幅度减少:import os

import requests

from time import time

from multiprocessing.pool import ThreadPool

def url_response(url):

path, url = url

r = requests.get(url, stream=True)

with open(path, 'wb') as f:

for ch in r:

f.write(ch)

urls = [("Event1", "https://www.python.org/events/python-events/805/"),

("Event2", "https://www.python.org/events/python-events/801/"),

("Event3", "https://www.python.org/events/python-events/790/"),

("Event4", "https://www.python.org/events/python-events/798/"),

("Event5", "https://www.python.org/events/python-events/807/"),

("Event6", "https://www.python.org/events/python-events/807/"),

("Event7", "https://www.python.org/events/python-events/757/"),

("Event8", "https://www.python.org/events/python-user-group/816/")]

start = time()

ThreadPool(9).imap_unordered(url_response, urls)

print(f"Time to download: {time() - start}")

# Time to download: 0.0064961910247802734

5. 使用urllib获取html页面import urllib.request

# urllib.request.urlretrieve('url', 'path')

urllib.request.urlretrieve('https://www.python.org/', 'PythonOrganization.html')

6. python下载视频的神器

you-get[2],目前you-get所支持的网站包含国内外几十个网站(youtube、twitter、腾讯、爱奇艺、优酷、bilibili等)。pip install you-get

测试一下:you-get https://www.bilibili.com/video/av52694584/?spm_id_from=333.334.b_686f6d655f706f70756c6172697a65.3

youtube-dl[3]也是一个类似的工具。

7. 举个例子

批量下载: NOAA-CIRES 20th Century 2m气温再分析资料[4]。一个个点手会点残,这时候可以借助Python来批量化下载数据。

首先打开页面,按F12查看网页源码:

可以看出,对应下载文件的链接都在div标签下的a标签中,需要将这些链接一一获取然后就可以进行批量化下载了。# -*- coding: utf-8 -*-

import urllib

from bs4 import BeautifulSoup

rawurl='https://www.esrl.noaa.gov/psd/cgi-bin/db_search/DBListFiles.pl?did=118&tid=40290&vid=2227'

content = urllib.request.urlopen(rawurl).read().decode('ascii') # 获取页面的HTML

soup = BeautifulSoup(content, 'lxml')

url_cand_html=soup.find_all(id='content') # 定位到存放url的标号为content的div标签

list_urls=url_cand_html[0].find_all("a") # 定位到a标签,其中存放着文件的url

urls=[]

for i in list_urls[1:]:

urls.append(i.get('href')) # 取出链接

for i,url in enumerate(urls):

print("This is file"+str(i+1)+" downloading! You still have "+str(142-i-1)+" files waiting for downloading!!")

file_name = "./ncfile/"+url.split('/')[-1] # 文件保存位置+文件名

urllib.request.urlretrieve(url, file_name)

python 下载文件-用python下载文件的若干种方法汇总相关推荐

  1. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  2. python花式编码_Python——花式打印对象的若干种方法

    今天是Python专题的第10篇文章,我们来聊聊Python当中的类. 打印实例 我们先从类和对象当中最简单的打印输出开始讲起,打印一个实例是一个非常不起眼的应用,但是在实际的编程当中却非常重要.原因 ...

  3. python花式输出_Python——花式打印对象的若干种方法

    今天是Python专题的第10篇文章,咱们来聊聊Python当中的类.编程 打印实例 咱们先从类和对象当中最简单的打印输出开始讲起,打印一个实例是一个很是不起眼的应用,可是在实际的编程当中却很是重要. ...

  4. python dict遍历_python遍历字典dict的几种方法汇总

    python遍历字典dict的方法: dic={'a':'how','b':'are','c':'you'}; 方法1, for key in dic: print key,dic[key] 方法2, ...

  5. 用python修改文件内容修改txt内容的3种方法

    用python修改文件内容修改txt内容的3种方法 方法一.修改原文件方式 def updateFile(file,old_str,new_str):"""替换文件中的字 ...

  6. 多个PDF文件如何合并成一个?两种方法轻松get

    在日常学习生活中,如果你需要将多个文档整合为一个完整的文件,比如说多篇文章.多张图片.多个表格等等,这时候就需要将这些文档合并成一个PDF文件.如何将多个PDF文件如何合并成一个?两种方法轻松帮你搞定 ...

  7. amr文件怎么转换成mp3,5种方法供你选择

    amr文件怎么转换成mp3?如果你常常使用手机录音或下载手机铃声,那么AMR格式对你来说一定不会陌生.因为amr文件的资源占用率低.传输方便,通常用作各大手机厂商广泛使用的一种保存录音文件的格式,非常 ...

  8. Python实现从url中提取域名的几种方法

    这篇文章主要介绍了Python实现从url中提取域名的几种方法,本文给出了3种方法实现在URL中提取域名的需求,需要的朋友可以参考下. 从url中找到域名,首先想到的是用正则,然后寻找相应的类库.用正 ...

  9. java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内

    Java 测试文件指针,java测试指针,两种方法打开文件并进行内 两种方法打开文件并进行内容定位package com.ronsoft.books.nio.channels;import java. ...

最新文章

  1. params(C# 参考)
  2. Python 技术篇-使用pygame库播放音乐没有声音问题解决办法
  3. 如何在 Asp.Net Core MVC 中处理 null 值
  4. MySQL 插入数据时,中文乱码???问题的解决
  5. java mongodb-crud
  6. jQuery 遍历 - prev() 方法
  7. Gradle简单使用
  8. python 朋友圈点赞收费吗_朋友圈点赞会收费吗,人工代刷微信点赞怎么操作
  9. excel离散度图表怎么算_怎么在excel中计算散点图的公式
  10. 拷贝速度测试软件,Fastcopy实际拷贝速度PK_硬盘_内存硬盘评测-中关村在线
  11. 概率论 —— 条件数学期望
  12. 计算机应用程序无响应,必看!电脑运行卡或软件卡死无响应,怎么办?
  13. linux怎么查看.pcd文件,PCD文件格式详解及在PCL下读取PCD文件
  14. 快速了解电力IEC104协议规约
  15. 最优传输论文(六十四):Gradually Vanishing Bridge for Adversarial Domain Adaptation论文原理
  16. 建立自己的机器人手臂-组装
  17. 岁末回首,义无反顾!
  18. 金融核心业务流程整理
  19. MySQL - 8 递归查询树结构
  20. 2023年黑马程序员Java学习路线图

热门文章

  1. OpenCV精进之路(四):图像处理——图片的缩放和图像金字塔
  2. 使用JWT来实现单点登录功能
  3. 豆瓣书籍数据爬取与分析
  4. bzoj 1217 [HNOI2003]消防局的设立 贪心
  5. freeMarker(十二)——模板语言补充知识
  6. jdk源码阅读-HashMap
  7. 摆脱jquery,用自己的JS库实现ajax功能
  8. 模拟image的ajaxPrefilter与ajaxTransport处理
  9. Visual Studio 2005 中的新增安全性功能
  10. UVA10063 Knuth‘s Permutation【排列组合】