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实现CET查分的方法
Mar 10 Python
python实现NB-IoT模块远程控制
Jun 20 Python
python format 格式化输出方法
Jul 16 Python
django session完成状态保持的方法
Nov 27 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
django使用admin站点上传图片的实例
Jul 28 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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代码简化
2010/02/08 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
简单了解什么是神经网络
2017/12/23 Python
微信跳一跳游戏python脚本
2020/04/01 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
python tkinter实现连连看游戏
2020/11/16 Python
Html5新标签解释及用法
2012/02/17 HTML / CSS
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
护理职业生涯规划书
2014/01/24 职场文书
解除劳动合同协议书
2014/04/14 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
房屋出售授权委托书
2014/10/12 职场文书
2015年班组工作总结
2015/04/20 职场文书
解决Vue+SpringBoot+Shiro跨域问题
2021/06/09 Vue.js
数据设计之权限的实现
2022/08/05 MySQL