一、引言
在现今数字化世界中,网络就如同一座深藏丰富信息的宝矿,Python爬虫则如同我们的金手指,引导我们挖掘出其中的宝藏。无论是为了科研收集大量图像数据,为设计项目寻找灵感素材,还是单纯想收藏一些有趣的网络视频,Python爬虫都能帮我们实现这个目标,实现批量且高效的下载网络图片和视频。接下来,我们将揭开Python爬虫的神秘面纱,深入探讨如何使用它来实现这个操作。

需求:将百度logo下载到本地
思路分析:
-
logo的url地址:https://www.baidu.com/img/bd_logo1.png -
利用
requests模块发送请求并获取响应 -
使用二进制写入的方式打开文件并将
response响应内容写入文件内
import requests
# 图片的url
url = 'https://www.baidu.com/img/bd_logo1.png'
# 响应本身就是一个图片,并且是二进制类型
response = requests.get(url)
# print(r.content)
# 以二进制写入的方式打开文件
with open('baidu.png', 'wb') as f:
# response.content: bytes二进制类型
f.write(response.content)
如果下载一个较大的资源,例如一个视频,可能需要的下载时间较长,在这个较长的下载过程中程序是不能做别的事情的(当然可以使用多任务来解决),如果在不是多任务的情况下,想要知道下载的进度,此时就可以通过类似迭代的方式下载部分资源。
1.使用iter_content
在获取数据时,设置属性stream=True
r = requests.get('https://www.baidu.com', stream=True)
with open('test.html', 'wb') as f:
for chunk in r.iter_content(chunk_size=100):
f.write(chunk)
2.stream=True说明:
- 如果设置了
stream=True,那么在调用iter_content方法时才会真正下载内容 - 如果没设置
stream属性则调用requests.get就会耗费时间下载
3.显示视频下载进度
# pip install tqdm
import requests
from tqdm import tqdm
def download_video(url, save_path):
response = requests.get(url, stream=True)
# 获取视频资源大小
total_size = int(response.headers.get('content-length', 0))
# 初始化下载大小
downloaded_size = 0
# unit: 下载单位(字节)
# unit_scale: 自动调整单位
# unit_divisor: 单位换算(除数为1024)
with open(save_path, 'wb') as file, tqdm(total=total_size, unit='B', unit_scale=True, unit_divisor=1024) as bar:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
downloaded_size += len(chunk)
bar.update(len(chunk))
print("下载完成...")
# 调用下载函数
video_url = "你要下载的视频资源地址"
path = "video.mp4"
download_video(video_url, path)
总的来说,Python爬虫在当今数字化时代中扮演着重要的角色,它能够帮助我们更高效地获取和利用网络信息。通过掌握Python爬虫技术,我们可以更好地满足各种需求,如科研、设计项目、信息收集等。因此,我鼓励你尝试学习并使用Python爬虫,相信你一定能从中受益匪浅。





被折叠的 条评论
为什么被折叠?



