PPT无素材?教你用Python批量抓取免费、高清、无版权图片!

本文授权转载自数据分析1480,禁二次转载

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


前言

相信在你的工作中可能会经常用到PPT吧,你在PPT制作过程中有没有这样的困惑,就是可以到哪里找到既高清又无版权争议的图片素材呢这里强烈推荐ColorHub,这是一个允许个人和商业用途的免费图片网站,真的很赞!从她的主页界面来看,也许你就会爱上她。

640?wx_fmt=png

那么,如何将网站中的图片存储到本地呢(例如比较关心跟数据相关的素材)?如果做到了,就可以在没有网络的情况下,随心所欲的选择精美图片制作PPT,随时随地的查看自己的图片库而本文所要跟大家分享的就是这个问题的解决方案。

爬虫思路

我们知道,对于图片网站的抓取,往往需要经过三层网页链接,为了能够直观地理解这三层链接,可以查看下图:

640?wx_fmt=png

顶层页是指通过网站主页的搜索栏,搜索出感兴趣的图片方向,便进入到的图片列表页,它的样子是这样的:

640?wx_fmt=png

次层页是指点击图片列表页中的某张图片,转而对应到的图片详情页,它的样子是这样的:

640?wx_fmt=png

目标页最后就是为了抓取图片详情页中的那张高清图片,而这张图片在网页源代码中就是一个图片链接,它的样子是这样的:

640?wx_fmt=png

所以,爬虫抓取图片的最终目的就是找到高清图片所对应的链接。接下来将通过代码的介绍,呈现三层链接的寻找和请求过程。代码的每一行都将对应中文解释,如果还有其他疑问,可以在留言区留言,我会第一时间给你答复。

# 导入第三方包	
import requests	
from bs4 import BeautifulSoup	
import random	
import time	
from fake_useragent import UserAgent	
# 通过循环实现多页图片的抓取	
for page in range(1,11):	
    # 生成顶层图片列表页的链接	
    fst_url = r'https://colorhub.me/search?tag=data&page={}'.format(page)	
    # 生成UA,用于爬虫请求头的设置	
    UA = UserAgent()	
    # 向顶层链接发送请求	
    fst_response = requests.get(fst_url, headers = {'User-Agent':UA.random})	
    # 解析顶层链接的源代码	
    fst_soup = BeautifulSoup(fst_response.text)	
    # 根据HTML的标记规则,返回次层图片详情页的链接和图片名称	
    sec_urls = [i.find('a')['href'] for i in fst_soup.findAll(name = 'div', attrs = {'class':'card'})]	
    pic_names = [i.find('a')['title'] for i in fst_soup.findAll(name = 'div', attrs = {'class':'card'})]	
    # 对每一个次层链接做循环	
    for sec_url,pic_name in zip(sec_urls,pic_names):	
        # 生成UA,用于爬虫请求头的设置	
        UA = UserAgent()	
        ua = UA.random	
        # 向次层链接发送请求	
        sec_response = requests.get(sec_url, headers = {'User-Agent':ua})	
        # 解析次层链接的源代码	
        sec_soup = BeautifulSoup(sec_response.text)	
        # 根据HTML的标记规则,返回图片链接	
        pic_url = 'https:' + sec_soup.find('img',{'class':'card-img-top'})['src']	
        # 对图片链接发送请求	
        pic_response = requests.get(pic_url, headers = {'User-Agent':ua})	
        # 将二进制的图片数据写入到本地(即存储图片到本地)	
        with open(pic_name+'.jpg', mode = 'wb') as fn:	
            fn.write(pic_response.content)	
        # 生成随机秒数,用于也没的停留	
        seconds = random.uniform(1,3)	
        time.sleep(seconds)

不难发现,代码的核心部分就16行,还是很简单的吧。还不赶快去测试一下这里的代码哦(如果你对某个方面感兴趣,如商务、建筑、植物等,通过搜索,找到顶层页链接,替换代码中的fst_url值即可)。

在运行完如上代码后,将会抓取ColorHub网站中的10页图片,一共包含325张高清图片,展示如下:

640?wx_fmt=png

结语

OK,今天的内容就分享到这里,如果你有任何问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位大咖在留言区分享你们自己的策略,我会第一时间将你的留言分享给大家。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

仔细阅读下面四篇文章,2小时快速掌握Python基础知识要点

完整Python基础知识要点

我是老表,欢迎转发分享本文


公众号 简说Python 唯一小编:老表,目前已经建了四个Python学习交流群,一个Java学习交流群,一个考研学习交流群,欢迎大家扫下方二维码加管理员老表微信,备注:Python,Java,考研等,加入对应的学习交流群,和爱学习的小伙伴们一起进步,简说学习交流,期待你的加入。

管理员二维码:

640?wx_fmt=jpeg

有问题,找老表

在看!

你可能感兴趣的:(PPT无素材?教你用Python批量抓取免费、高清、无版权图片!)