Python爬虫中图片的爬取方式有多种多样,本文将介绍几种常见的将图片保存的方式。
1.通过urllib.urlretrieve来爬取图片
基础知识介绍:
urllib.urlretrieve(url[, filename[, reporthook[, data]]])
参数说明:
- url:外部或者本地url
- filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
- reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
- data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
案例:
from urllib import request
import re,requests,os
base_url = "https://www.feizl.com/html/127364_{}.htm"
#请求头
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
base_imgPath = r"C:\Users\Administrator\Desktop\123\{}.jpg"
for i in range(2,16):
#构造url地址
url = base_url.format(i)
#图片保存路径
imgSavePath = base_imgPath.format(i)
#构造请求
req = request.Request(url=url,headers=headers)
#发送请求,获取响应
response = request.urlopen(req)
#提取数据
html = response.read().decode()
#创建正则表达式规则
parrent = re.compile('class="tupian".*?src="(.*?)"',re.S)
#匹配获取内容
image = re.findall(parrent,html)
#图片保存
request.urlretrieve(image[0],imgSavePath)
2.通过文件操作流程来下载图片
基础知识:
open('文件路径','打开模式')
功能:打开或者创建一个文件
返回值:文件io对象
打开模式一共N种:
- w模式 写模式write 文件不存在时会创建文件,如果文件已存在则会清空文件
- r模式 读模式read 文件不存在就报错,存在则准备读取文件
- a模式 追加模式 append 文件不存在则新建,文件存在则在文件末尾追加内容
- x模式 抑或模式 xor 文件存在则报错,文件 不存在则新建文件
- b模式 二进制模式 binary 辅助模式不能单独使用
- +模式 读写模式(与其他模式结合使用)
案例:
from urllib import request
import re,requests,os
base_url = "https://www.feizl.com/html/127364_{}.htm"
#请求头
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
base_imgPath = r"C:\Users\Administrator\Desktop\123\{}.jpg"
for i in range(2,16):
#构造url地址
url = base_url.format(i)
#图片保存路径
imgSavePath = base_imgPath.format(i)
#构造请求
req = request.Request(url=url,headers=headers)
#发送请求,获取响应
response = request.urlopen(req)
#提取数据
html = response.read().decode()
#创建正则表达式规则
parrent = re.compile('class="tupian".*?src="(.*?)"',re.S)
#匹配获取内容
image = re.findall(parrent,html)
#图片保存
req = requests.get(image[0],headers=headers)
#将图片以二进制的形式保存
with open(imgSavePath,'wb') as f:
f.write(req.content)
3.通过os模块和ffmpeg程序来保存下载图片
基础准备:
os.system(‘comand’)
作用:会执行括号中的命令,如果命令成功执行,这条语句返回0,否则返回1
ffmpeg -i 爬取到的图片地址 图片的保存路径
【注】使用此方法之前请确保已安装ffmepg程序。关于ffmpeg的安装请自行百度,本文将不做过多叙述。
案例:
from urllib import request
import re,requests,os
base_url = "https://www.feizl.com/html/127364_{}.htm"
#请求头
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
}
base_imgPath = r"C:\Users\Administrator\Desktop\123\{}.jpg"
for i in range(2,16):
#构造url地址
url = base_url.format(i)
#图片保存路径
imgSavePath = base_imgPath.format(i)
#构造请求
req = request.Request(url=url,headers=headers)
#发送请求,获取响应
response = request.urlopen(req)
#提取数据
html = response.read().decode()
#创建正则表达式规则
parrent = re.compile('class="tupian".*?src="(.*?)"',re.S)
#匹配获取内容
image = re.findall(parrent,html)
#图片保存
#将ffmpeg命令添加到系统命令中
download_commond = "ffmpeg -i {} {}".format(image[0],imgSavePath)
os.system(download_commond)