python 爬虫之下载文件的方式以及下载实例
目录
第一种方法: urlretrieve 方法下载
第二种方法: request download
第三种方法: 视频文件, 大型文件下载
实战演示
第一种方法: urlretrieve 方法下载
程序示例:
- import os
- from urllib.request import urlretrieve
- os.makedirs('./img/',exist_ok=True) #创建目录存放文件
- image_url = "https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg"
- urlretrieve(image_url,'./img1/image1.png') #将什么文件存放到什么位置
补充知识:
os.makedirs() 方法用于递归创建目录. 像 mkdir(), 但创建的所有 intermediate-level 文件夹需要包含子目录.
语法
makedirs() 方法语法格式如下:
os.makedirs(path, mode=0o777)
参数
path -- 需要递归创建的目录.
mode -- 权限模式.
返回值
该方法没有返回值.
第二种方法: request download
程序示例:
- import requests
- image_url='https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg'
- r = requests.get(image_url)
- with open('./img1/image1.png','wb') as f:
- f.write(r.content)
补充知识:
with open 的使用格式
- with open('文件名','读写方式')as f:
- f.read() #读取是整个文件
- f.readline() #读取第一行
- f.readlines() #读取每一行, 可以结合 for 使用 (参考我上述完整代码), 记得都要带方法都要带括号, 不然返回的是内存地址
- f.close() #关闭文件 文件使用完毕后必须关闭, 因为文件对象会占用操作系统的资源, 并且操作系统同一时间能打开的文件数量也是有限的
- f.write() #写入文件
第三种方法: 视频文件, 大型文件下载
可以设置每次存储文件的大小, 所以可以下载大型文件, 当然也可以下载小文件.
程序示例:
- import requests
- image_url = 'https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg'
- r = requests.get(image_url,stream=True) #stream=True #开启时时续续的下载的方式
- with open(filename, 'wb') as f:
- for chunk in r,iter_content(chunk_size=32): #chunk_size #设置每次下载文件的大小
- f.write(chunk) #每一次循环存储一次下载下来的内容
实战演示
下面一个简单的使用爬虫下载图片的程序
爬取的是一个旅游网站的地图
程序示例:
- import requests
- import os
- from bs4 import BeautifulSoup
- from urllib.request import urlretrieve
- def main():
- url = 'http://www.onegreen.net/maps/List/List_933.html'
- os.makedirs('./img/',exist_ok=True) #创建目录存放文件
- HTML = requests.get(url).text #获取网页 HTML
- soup = BeautifulSoup(HTML,'lxml')
- img_url = soup.find_all('img') #获取所有的 img 标签, 我在这里只是演示下载, 所有不做进一步的筛选
- print(len(img_url))
- for url in img_url:
- ul = url['src'] #获取 src 属性
- img = 'http://www.onegreen.net/' + ul #补全图片 url
- print(img)
- urlretrieve(img , './img/%s' % ul.split('/')[-1]) #存储图片
- if __name__ =='__main__':
- main()
程序运行结果:
来源: https://www.cnblogs.com/-wenli/p/10160351.html