python爬取网页图片并保存到本地
先把原理梳理一下:首先我们要爬取网页的代码,然后从中提取图片的地址,通过获取到的地址来下载数据,并保存在文件中,完成。
下面是具体步骤:
先确定目标,我挑选的是国服守望先锋的官网的英雄页面,我的目标是爬取所有的英雄的图片
页面是这样的
首先做的就是得到它的源代码找到图片地址在哪里
这个函数最终会返回网页代码
def getHtml(url): html = requests.get(url) return html.text
将其先导入文本文件观察
发现图片的地址所在位置格式是这样
<img src="https://overwatch.nosdn.127.net/1/assets/img/pages/heroes/list/zarya.png" class="portrait" />
因此就可以依此写出正则表达式,并从网页代码中将图片地址提取出来
imagelist=re.findall('img src="(.*?)" class="portrait"',html)
上面这句话得到的就是图片地址的集合
之后要做的就是遍历集合中的地址,依此下载并保存到目标的文件夹中
下面是项目完整代码
# -*- coding: utf-8 -*- ''' Created on 2020年3月12日 @author: 20514 ''' import requests import re #打开网页,获取网页源码 def getHtml(url): html = requests.get(url) return html.text def getImag(html): imagelist=re.findall('img src="(.*?)" class="portrait"',html) pat = 'list/(.*?).png' ex = re.compile(pat) i=1 for url in imagelist: print('Downloding:'+url) #从图片地址下载数据 image=requests.get(url) # 获取英雄名(这里可以自己为文件取名就行,下面的name变量是从图片地址中提取到的英雄名) pat = 'list/(.*?).png' ex = re.compile(pat) if ex.search(url): name=ex.search(url).group(1) else: pat ='heroes/(.*?)/hero-select' ex = re.compile(pat) if ex.search(url): name=ex.search(url).group(1) else: name='new'+str(i)+'?' i=i+1 #在目标路径创建相应文件 f=open('C:\\Users\\20514\\Desktop\\owhero\\'+name+'.png','wb') #将下载到的图片数据写入文件 f.write(image.content) f.close() return '结束' print('获取ow官网英雄图片') url='https://ow.blizzard.cn/heroes/' print('正在获取图片') html=getHtml(url) print('下载图片中') print(getImag(html)) print('下载完成')
效果:
-------------------------------------------------------------------------------------------------------------------------------------
近几天学了点通过python爬取网页的知识,不得不说跟java相比起来,这方面python真的方便太多了。