Python 爬虫学习笔记(二)urllib下载图片和视频

一、urllib的1个类型和6个方法

1. response的类型

我们打印一下urllib.request方法获取的response是什么类型

import urllib.request

url = "http://www.baidu.com"

response = urllib.request.urlopen(url)

print(type(response))

结果是’HTTPResponse类型,暂且记住,是为了和之后的requests库区分开。
Python 爬虫学习笔记(二)urllib下载图片和视频_第1张图片

2. 6个方法

6个方法都是对response而言的:

  1. response.read() :特点是一字节一字节去读,效率低
content = response.read()  # 全部读取

content = response.read(5) # 表示只读前5个字节
  1. response.readline() :读取(第)一行
content = response.readline()
  1. response.readlines() :读取所有行,列表储存(类似文件的读取)
content = response.readlines() # 返回的是列表
  1. response.getcode():获取状态码
print(response.getcode()) # 返回200表示访问成功,逻辑正确
  1. response.geturl():获取url地址
print(response.geturl())  # 基本没什么用
  1. response.getheaders():获取状态信息(响应头)
print(response.getheaders()) # 列表类型,元素都是元组形式

二、使用urllib进行下载

用到的函数是urllib.request.urlretrieve(url=?,filename=?)

参数url即我们要下载的资源的url地址,filename即我们要保存到本地的文件名。

下面分别以下载网页、图片和视频为例:

1. 下载网页

url_page = "http://www.baidu.com"

urllib.request.urlretrieve(url_page, 'baidu.html')

运行上述代码后,在项目目录下发现多了’baidu.html’,下载成功
Python 爬虫学习笔记(二)urllib下载图片和视频_第2张图片

2. 下载图片

以网络图片为例,如图复制图片url地址
Python 爬虫学习笔记(二)urllib下载图片和视频_第3张图片

url_img = "https://img2.baidu.com/it/u=3998891405,3474278461&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

urllib.request.urlretrieve(url_img, 'jenny.jpg')

运行上述代码后,在项目目录下发现多了’jenny.jpg’,下载成功
Python 爬虫学习笔记(二)urllib下载图片和视频_第4张图片
大家可能和我有一样的疑问,手动下载它不香吗?

我总结的原因如下:

  1. 当需要下载的图片特别多时,例如成千上万,手动下载肯定比不上程序
  2. 我们往往得不到资源的url,没有办法直接手动下载。爬取后的解析操作为的就是获取有用的信息,例如想要下载图片的url。

3. 下载视频

以网络视频为例,F12获取视频下载的src
Python 爬虫学习笔记(二)urllib下载图片和视频_第5张图片

url_video = "https://vd4.bdstatic.com/mda-ncabdxs3k2mkjq3g/sc/cae_h264_delogo/1646986556076827915/mda-ncabdxs3k2mkjq3g.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1647146550-0-0-a2c5e5ba902195ad44640e87df20b352&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0750870118&vid=12970100849765423858&abtest=100815_2-17451_1&klogid=0750870118"

urllib.request.urlretrieve(url_video, 'video.mp4')

运行上述代码后,在项目目录下发现多了’video.mp4’,下载成功, 并且能正常播放。
Python 爬虫学习笔记(二)urllib下载图片和视频_第6张图片
全部代码:

import urllib.request

# 下载网页
url_page = "http://www.baidu.com"

urllib.request.urlretrieve(url_page, 'baidu.html')

# 下载图片
url_img = "https://img2.baidu.com/it/u=3998891405,3474278461&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

urllib.request.urlretrieve(url_img, 'jenny.jpg')

# 下载视频
url_video = "https://vd4.bdstatic.com/mda-ncabdxs3k2mkjq3g/sc/cae_h264_delogo/1646986556076827915/mda-ncabdxs3k2mkjq3g.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1647146550-0-0-a2c5e5ba902195ad44640e87df20b352&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0750870118&vid=12970100849765423858&abtest=100815_2-17451_1&klogid=0750870118"

urllib.request.urlretrieve(url_video, 'video.mp4')

总结

  1. 通过urllib.request.urlopen()获取到的response是HTTPResponse类型,要和后面的requests库区分开。
  2. urlretrieve的两个参数分别是下载资源的url,和下载资源的命名。

你可能感兴趣的:(爬虫,python,学习)