python爬虫之下载文件的方式总结以及程序实例
python爬虫之下载文件的方式以及下载实例
目录
第一种方法:urlretrieve方法下载
第二种方法:request download
第三种方法:视频文件、大型文件下载
实战演示
第一种方法:urlretrieve方法下载
程序示例:
1 2 3 4 5 | 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' ) #将什么文件存放到什么位置 |
补充知识:
1 2 3 4 5 6 7 8 9 | os.makedirs() 方法用于递归创建目录。像 mkdir (), 但创建的所有intermediate-level文件夹需要包含子目录。 语法 makedirs()方法语法格式如下: os.makedirs(path, mode=0o777) 参数 path -- 需要递归创建的目录。 mode -- 权限模式。 返回值 该方法没有返回值。 |
第二种方法:request download
程序示例:
1 | import requests<br>image_url= 'https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg' <br>r = requests.get(image_url) <br>with open( './img1/image1.png' , 'wb' ) as f: <br> f.write(r.content) |
补充知识:
1 2 3 4 5 6 | with open的使用格式 with open(’文件名‘,‘读写方式’) as f: f.read() #读取是整个文件 f.readline() #读取第一行 f.readlines() #读取每一行,可以结合 for 使用(参考我上述完整代码),记得都要带方法都要带括号,不然返回的是内存地址 <br> f.close() #关闭文件 文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的<br> f.write() #写入文件 |
第三种方法:视频文件、大型文件下载
可以设置每次存储文件的大小,所以可以下载大型文件,当然也可以下载小文件。
程序示例:
1 2 3 | import requests image_url = 'https://p0.ssl.qhimg.com/t01e890e06c93018fa8.jpg' r = requests.get(image_url,stream=True) #stream=True #开启时时续续的下载的方式<br>with open(filename, 'wb' ) as f: for chunk in r,iter_content(chunk_size=32): #chunk_size #设置每次下载文件的大小<br> f.write(chunk) #每一次循环存储一次下载下来的内容 |
实战演示
下面一个简单的使用爬虫下载图片的程序
爬取的是一个旅游网站的地图
程序示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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__' :<br> main() |
程序运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?