爬取实例二:如何批量爬取图片

1、环境配置

python解释器:python的任意版本
pycharm编译器:pycharm的任意版本
第三方模块:requests以及内置re库
(这个案例只会爬取90张图片没有做页面跳转,主要是练习如何使用正则表达式建议先看我的正则表达式使用大全

2、整体代码

2.1实现须知

以下是整体代码块,在pycharm中新建一个py文件,在他的根目录创建一个album文件夹储存下载的图片,直接运行就可以批量下载自己想要下载的图片
在这里插入图片描述

import requests
import re


key = input('请输入你想下载的图片:')
headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
    }
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1595376564352_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1595376564354%5E00_1212X622&sid=&word='+key
result = requests.get(url,headers=headers).text
req = re.findall(r'"objURL":"(.*?)"',result)
for i in req:
    name = i[-10:]
    name = re.sub('/','',name)
    end = re.search('(\.jpg|\.png|\.jpeg|\.gif)$',name)
    if end == None:
        name = name + '.jpg'
    # print(name)
    with open('album/%s'%name,'wb')as f:
        try:
            r = requests.get(i).content
        except Exception as e:
            print(e)
        f.write(r)

2.2代码详细讲解

import requests # 获取数据的第三方模块需要自己下载 pip install requests除了问题参考我的python基础有解决问题的办法
import re # 正则表达式的模块导入才能筛选数据 python自带的导入即可使用


key = input('请输入你想下载的图片:')# 运行框弹出的内容
headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
    }# 用户代理,将pycharm伪装成浏览器获得数据,使服务器识别不出我们是爬虫(最基本的反爬措施)
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1595376564352_R&pv=&ic=&nc=1&z=&hd=&latest=&copyright=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1595376564354%5E00_1212X622&sid=&word='+key
# url = 百度首页想下载的图片地址,可直接复制通过浏览器打开查看一下
result = requests.get(url,headers=headers).text# 请求数据
req = re.findall(r'"objURL":"(.*?)"',result)# 通过正则表达式筛选数据,获得每张图片的url下载地址
for i in req:#遍历每一张图的url下载保存
    name = i[-10:]#给图片命名,切片最后10个字符命名
    name = re.sub('/','',name)#将名称中有/的替换为‘’空,防止保存时出错
    end = re.search('(\.jpg|\.png|\.jpeg|\.gif)$',name)#如果name中没有图片尾缀格式,通过下面循环加上.jpg格式
    if end == None:
        name = name + '.jpg'
    with open('album/%s'%name,'wb')as f:#保存图片
        try:# 某些图片无法下载,程序就会终止,为了不终止,跳过问题继续下载而做的异常处理
            r = requests.get(i).content#获得图片的下载内容
        except Exception as e:
            print(e)
        f.write(r)# 保存图片

想做页面跳转的出了问题留言找我,帮你解答

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值