批量爬取变形金刚图片保存到本地。

news/2025/3/29 5:29:52/

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文文章来自:CSDN 作者:Guapifang

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

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

现在贴一个url=https://img.ivsky.com/img/tupian/t/201008/05/bianxingjingang-001.jpg
请复制上面的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://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图片,如下
在这里插入图片描述
点击打开查看如下:
在这里插入图片描述
便是下载成功辣,很简单吧。

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

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/,会看到如下的图片:
在这里插入图片描述
于是我们需要分别得到该页面中显示的所有图片的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等图片格式的字条,如下:
在这里插入图片描述
上面圈出来的**//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=0n=len(text)urls=[]#储存urlwhile i<n:if text[i:i+m]==st:url=''for j in range(i+m,n):if text[j]=='"':i=jurls.append(url)breakurl+=text[j]i+=1return urls
urls=get_pictures_urls(re.text)
for url in urls:print(url)

打印结果如下:
在这里插入图片描述
得到了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=0n=len(text)urls=[]#储存urlwhile i<n:if text[i:i+m]==st:url=''for j in range(i+m,n):if text[j]=='"':i=jurls.append(url)breakurl+=text[j]i+=1return urlsheaders={'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)

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


http://www.ppmy.cn/news/285976.html

相关文章

Python爬虫:批量爬取变形金刚图片,下载保存到本地。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文文章来自&#xff1a;CSDN 作者&#xff1a;Guapifang 其实和爬取普通数据本质一样&#xff0c;不过我们直接爬取数据会直接返回&#xff0c;爬取图…

synchronize锁和ReentrantLock锁

首先ReentrantLock是一个非公平锁,但也是可以变成公平锁的(传入参数true即可), 就是ReentrantLock lockernew ReentrantLock(true); ReentrantLock的唤醒机制是搭配Condition类来实现的,可以实现为唤醒指定的等待线程. 而synchronized锁是搭配wait 和notify来实现唤醒的且唤…

synchronized和ReentrantLock区别简介说明

在多线程开发中&#xff0c;需要锁定指定代码块&#xff0c;使其在同一时间只能由一个线程运行&#xff0c;我们日常开发中常用的同步锁有: synchronized和ReentrantLock,那么他们两者之间到底有什么不同之处呢&#xff1f; 下文笔者讲述synchronized和ReentrantLock区别简介…

synchronized 和Lock区别以及可重入锁(ReentrantLock)

对于synchronized 还没理解的可以先看看我之前写的这篇博客讲解synchronized 先对synchronized有一个初步了解&#xff1a;https://blog.csdn.net/dekulugu/article/details/108929818 一、synchronized 和Lock区别 知道了synchronized 和Lock&#xff0c;他们都是实现了多线程…

ReentrantLock和synchronized性能比较

ReentrantLock和synchronized在低并发的时候性能差距不大&#xff0c;本次主要测试高并发时的性能。 使用ReentrantLock public class SysDemoTest implements Runnable{private HashMap<String,Integer> x;private CountDownLatch latch;private CountDownLatch end;p…

【并发编程】 --- synchronized/ReentrantLock两大特性(可重入性和不可中断性)介绍

文章目录 1 可重入特性1.1 可重入的含义及synchronized可重入特性演示1.2 简单说一下synchronized可重入原理 2 synchronized不可中断特性 --- interrupt和stop都不可中断2.1 不可中断的含义及synchronized不可中断特性演示2.2 ReentrantLock的可中断与不可中断2.2.1 Reentrant…

ReentrantLock(可重入锁)和synchronized区别

可重入性&#xff1a;ReentrantLock字面意思即为再进入锁&#xff0c;称为可重入锁&#xff0c;其实synchronize所使用的锁也是可以重入的&#xff0c;两者关于这个区别不打&#xff0c;它们都是同一个线程进入一次&#xff0c;锁的计数器进行自增&#xff0c;要等到锁的计数器…

synchronized和ReentrantLock性能瓶颈及实现

个人理解 synchronized和ReentrantLock相信懂Java的人并不陌生&#xff0c;这两种锁虽然提供了不同的线程同步方式&#xff0c;但是对于我们使用者来说&#xff0c;他们完成的功能都差不多&#xff0c;或许后者在使用上更加灵活&#xff0c;功能更加强大。但是他们到底有什么区…