分享

50行代码极速下载无版权高清图

 heii2 2019-07-11

来源:Python知识圈  链接:

https://mp.weixin.qq.com/s/hRnRH7EL5enstoQ-iqr2uQ

 阅读文本大概需要 3 分钟。

前言

生活或者工作中,不管是写文章、公司 UI 交互图还是广告图等等都需要用到图片,图片的优点和重要性自不用说。

图片我们可不能随便从网上搜索来用,我们得注意图片的版权。我一般是在无版权的网站上找图片,比如我常用的 pixabay 网站,打开网站,搜索我们需要的主题图片,结果,加载大半天,还是下面这样的。。。

这大大的影响我们的效率和心情啊,因为这网站的服务器是国外的,所有才会这么慢。

作为一个追求工作和生活高效率的 Pythoner,这个实在忍不了。

于是我用决定用 Python 写一个简单的爬虫,把不同主题的图片分别保存在本地,下次需要用图的时候直接在本地浏览选择就行了。

页面元素分析

浏览器中 F12 调试,我们看看单个图片的 url 链接🔗,大部分的图片 url 都在 「data-lazy-srcset」 属性里。

正则提取元素

我们用正则表达式提取出一个页面所有的图片 url,比如我提取第 2 页所有的图片 url,并把这些 url 放在列表里,方便接下来调用后下载图片。

def get_urls(url):
headers = {
'User-Agent':
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
html = requests.get(url, headers=headers).text
urls = re.compile(r'data-lazy-srcset='(.*?)'')
res = re.findall(urls, html)
img_urls = []
for u in res:
img_url = str(u).split(',')[0].strip(' 1x')
img_urls.append(img_url)
return img_urls

创建目录

我们给不同的主题图片主动新建文件夹保存,包括「素材图片」文件夹前面的路径大家换成自己路径,我用的 Mac 电脑路径和 windows 系统路径不同,大家根据情况替换。后面的 direcory 参数是我们输入的查询图片的关键字,根据我们输入的关键字来创建主题文件夹储存下载的图片。

# 创建不同的文件夹储存图片
def mkdir(directory):
isExists = os.path.exists(r'/Users/brucepk/Pictures/素材图片/{}'.format(directory))
if not isExists:
print('创建 %s 目录' % directory)
os.makedirs(r'/Users/brucepk/Pictures/素材图片/{}'.format(directory)) # 创建目录
os.chdir(r'/Users/brucepk/Pictures/素材图片/{}'.format(directory)) # 切换到创建的文件夹
return True
else:
print('目录 %s 已存在,即将保存!' % directory)
return False

下载图片

我们把提取出来的图片下载下来,open 后面的 wb+ 表示以二进制读写模式打开。

def download(filename, url):
with open(filename, 'wb+') as f:
try:
f.write(requests.get(url).content)
print('成功下载图片:', filename)
except:
print('下载失败:', filename)

最后,pk 哥用 input 方法让大家自行输入查询的英文关键字,「pagi」后的参数是页面,我用 for 循环让它爬取前 5 页。

if __name__ == '__main__':
directory = input('输出你要下载的图片的英文关键字:')
for num in range(1, 6):
search_url = 'https:///images/search/{}/?pagi={}'.format(directory, num) # 拼接每页的链接
mkdir(directory)
for url in get_urls(search_url):
filename = r'/Users/brucepk/Pictures/素材图片/{}/'.format(directory) + url.split('/')[-1] # 图片的路径
download(filename, url)
print('第%s页已爬取' % num)
time.sleep(int(format(random.randint(3, 10)))) # 随机等待时间

运行代码,pk 哥输入英文关键字后回车,效果如下。

效果展示

把自己常用的主题图都下载在本地,以后找图再也不用等了,爽歪歪。

本文全部源码: 

https://github.com/Brucepk/download-no-copyright-image/blob/master/pixabay.py题图:Pixabay

(完)

看完本文有收获?请转发分享给更多人

关注「Python那些事」,做全栈开发工程师

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多