Python爬虫之爬取图片

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值