Python 爬虫批量爬取网页图片保存到本地的实现代码


Posted in Python onDecember 24, 2020

其实和爬取普通数据本质一样,不过我们直接爬取数据会直接返回,爬取图片需要处理成二进制数据保存成图片格式(.jpg,.png等)的数据文本。

现在贴一个url=https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg
请复制上面的url直接在某个浏览器打开,你会看到如下内容:

Python 爬虫批量爬取网页图片保存到本地的实现代码

这就是通过网页访问到的该网站的该图片,于是我们可以直接利用requests模块,进行这个图片的请求,于是这个网站便会返回给我们该图片的数据,我们再把数据写入本地文件就行,比较简单。

import requests
headers={
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg'
re=requests.get(url,headers=headers)
print(re.status_code)#查看请求状态,返回200说明正常
path='test.jpg'#文件储存地址
with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
      for chunk in re.iter_content(chunk_size=128):
        f.write(chunk)

然后得到test.jpg图片,如下

Python 爬虫批量爬取网页图片保存到本地的实现代码

点击打开查看如下:

Python 爬虫批量爬取网页图片保存到本地的实现代码

便是下载成功辣,很简单吧。

现在分析下批量下载,我们将上面的代码打包成一个函数,于是针对每张图片,单独一个名字,单独一个图片文件请求,于是有如下代码:

import requests
def get_pictures(url,path):
  headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'} 
  re=requests.get(url,headers=headers)
  print(re.status_code)#查看请求状态,返回200说明正常
  with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
        for chunk in re.iter_content(chunk_size=128):
          f.write(chunk)
url='https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg'
path='test.jpg'#文件储存地址
get_pictures(url,path)

现在要实现批量下载图片,也就是批量获得图片的url,那么我们就得分析网页的代码结构,打开原始网站https://www.ivsky.com/tupian/bianxingjingang_v622/,会看到如下的图片:

Python 爬虫批量爬取网页图片保存到本地的实现代码

于是我们需要分别得到该页面中显示的所有图片的url,于是我们再次用requests模块返回当前该页面的内容,如下:

import requests
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
print(re.text)

运行会返回当前该页面的网页结构内容,于是我们找到和图片相关的也就是.jpg或者.png等图片格式的字条,如下:

Python 爬虫批量爬取网页图片保存到本地的实现代码

上面圈出来的**//img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-017.jpg**便是我们的图片url,不过还需要前面加上https:,于是完成的url就是https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-017.jpg。

我们知道了这个结构,现在就是把这个提取出来,写个简单的解析式:

import requests
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
def get_pictures_urls(text):
  st='img src="'
  m=len(st)
  i=0
  n=len(text)
  urls=[]#储存url
  while i<n:
    if text[i:i+m]==st:
      url=''
      for j in range(i+m,n):
        if text[j]=='"':
          i=j
          urls.append(url)
          break
        url+=text[j]
    i+=1
  return urls
urls=get_pictures_urls(re.text)
for url in urls:
  print(url)

打印结果如下:
Python 爬虫批量爬取网页图片保存到本地的实现代码

得到了url,现在就直接放入一开始的get_pictures函数中,爬取图片辣。

import requests
def get_pictures(url,path):
  headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
  re=requests.get(url,headers=headers)
  print(re.status_code)#查看请求状态,返回200说明正常
  with open(path, 'wb') as f:#把图片数据写入本地,wb表示二进制储存
        for chunk in re.iter_content(chunk_size=128):
          f.write(chunk)
def get_pictures_urls(text):
  st='img src="'
  m=len(st)
  i=0
  n=len(text)
  urls=[]#储存url
  while i<n:
    if text[i:i+m]==st:
      url=''
      for j in range(i+m,n):
        if text[j]=='"':
          i=j
          urls.append(url)
          break
        url+=text[j]
    i+=1
  return urls

headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'}
url='https://www.ivsky.com/tupian/bianxingjingang_v622/'
re=requests.get(url,headers=headers)
urls=get_pictures_urls(re.text)#获取当前页面所有图片的url
for i in range(len(urls)):#批量爬取图片
  url='https:'+urls[i]
  path='变形金刚'+str(i)+'.jpg'
  get_pictures(url,path)

结果如下:

Python 爬虫批量爬取网页图片保存到本地的实现代码

然后就完成辣,这里只是简单介绍下批量爬取图片的过程,具体的网站需要具体分析,所以本文尽可能详细的展示了批量爬取图片的过程分析,希望对你的学习有所帮助,如有问题请及时指出,谢谢~

到此这篇关于Python 爬虫批量爬取网页图片保存到本地的文章就介绍到这了,更多相关Python 爬虫爬取图片保存到本地内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python自动化工具日志查询分析脚本代码实现
Nov 26 Python
Python读写文件方法总结
Jun 09 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
python实现画圆功能
Jan 25 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
python中sort和sorted排序的实例方法
Aug 26 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
python获取linux系统信息的三种方法
Oct 14 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
用python获取txt文件中关键字的数量
Dec 24 #Python
举例讲解Python装饰器
Dec 24 #Python
python 基于opencv操作摄像头
Dec 24 #Python
python 基于selenium实现鼠标拖拽功能
Dec 24 #Python
python实现简单猜单词游戏
Dec 24 #Python
Python 虚拟环境工作原理解析
Dec 24 #Python
python基于openpyxl生成excel文件
Dec 23 #Python
You might like
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
js实现常用排序算法
2016/08/09 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Django学习笔记之Class-Based-View
2017/02/15 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
django中media媒体路径设置的步骤
2019/11/15 Python
python如何控制进程或者线程的个数
2020/10/16 Python
Python实现区域填充的示例代码
2021/02/03 Python
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
教师演讲稿范文
2014/01/08 职场文书
读书活动实施方案
2014/03/10 职场文书
鸦片战争观后感
2015/06/09 职场文书
Python集合的基础操作
2021/11/01 Python