使用Python下载文件(大文件,重定向文件)

在网络上很多文件是使用http的方式提供下载。使用python做爬虫,爬文件是其中一个目标。

Python有很多包可以做http请求,如下:

  • python内置的包: urllib,urllib2和urllib3
  • requests包,这是一个在urllib3上扩展的包
  • grequests,扩展requests包,用来处理异步的http功能。

这里使用requests来做文件下载,主要提供三种示例:

  1. 小文件的爬取
  2. 大文件的爬取
  3. 重定向文件的爬取

requests包爬内容的基本用法

最基本的是使用request的get方法,就可以很简单下载一个网页。如下:

import requests
url = 'https://www.baidu.com'
html = requests.get(url)

首先是引入requests包,然后向requests的get函数传入url作为参数即可。

requests包对小文件的爬取

上面的示例中,网页内容存放在html变量中。对于下载文件,我们往往需要以二进制的方式存放在文件中。

使用python内置的open函数以字节写的方式打开文件,把html.content里的内容写到文件中。如下:

with open('filename.txt', 'wb') as r: 
r.write(html.content)

requests包对大文件的爬取

对于大文件,我们就不能简单的调用html.content来获取文件内容。

这种情况下,requests以流的方式读取文件内容,它提供了request.iter_content方法可以让我们以迭代的方式读取,每次迭代读取内容称为块chunk,在读文件流时,指定读取的每块大小(chunk_size)。

示例如下:

r = requests.get(url, Stream=True)
with open("filename.pdf",'wb') as Pypdf:
for chunk in r.iter_content(chunk_size=1024)
if chunk:
pypdf.write(ch)

requests包爬取重定向文件

对于重定向后的文件,requests.get()函数,提供了allow_redirects参数,我们只要把它设为True,就可以了。

import requests
url = 'http://example.com/file.pdf'
response = requests.get(url, allow_redirects=True)
with open('filename.pdf') as Pypdf:
pypdf.write(response.content)

requests包提供了非常简单明了的api。更多高级用法可以查看这里

版权声明:著作权归作者所有。

相关推荐

Python读取.wav音频文件

可以使用scipy.io.wavfile.read(somefile)来读取.wav音频文件。它会返回一个元组,第一项为音频的采样率,第二项为音频数据的numpy数组。用法:from scipy.io import wavfilefs, data = wavfile.read('./output/audio.wav')也可以使用PySoundFile,它也是返回一个元组,指示第一项为数据,第二项为

Linux使用find查找大文件

Linux可以使用find命令来查找大文件。语法find <path> [-type <file-type>] -size +<size><unit> -type:指定文件类型,它有这些值d:目录f:普通文件l:链接b: 缓存块c: 非缓存字符p:  pipes

CentOS:yum安装rz和sz上传下载文件

安装$sudo yum install -y lrzsz rz使用rz上传本地文件到服务$rz 执行命令后,在弹出框中选择要上传的文件即可。sz下载服务器的文件到本地$sz filepath 设置默认本地上传下载目录SecureCRT软件 -> Options -> session op

Python替换文件里的文本

在原来的文件直接替换文本使用fileinput在文件上直接替换:#!/usr/bin/env python3 import fileinput with fileinput.FileInput(fileToSearch, inplace=True, backup='.bak') as file:   &nb

Python判断文件是否存在的方法

方法一使用os.path.exists判断路径是否存在,包括文件夹和文件。import os.path os.path.exists(my_file) 方法二使用os.path.isfile检查路径是否为文件,如果文件存在返回True。import os.path os.path.isfile(my_file)  方法三面向对象文件系统路径操作包pathlib2,pa