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

那么,费高如何将网站中的码批图片存储到本地呢(例如比较关心跟数据相关的素材)?如果做到了,就可以在没有网络的量抓情况下,随心所欲的取免清图选择精美图片制作PPT,随时随地的费高查看自己的图片库。而本文所要跟大家分享的码批就是这个问题的解决方案。
爬虫思路
我们知道,量抓对于图片网站的取免清图抓取,往往需要经过三层网页链接,高防服务器为了能够直观地理解这三层链接,可以查看下图:

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

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

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

所以,爬虫抓取图片的最终目的就是找到高清图片所对应的链接。网站模板接下来将通过代码的介绍,呈现三层链接的寻找和请求过程。
1# 导入第三方包 2import requests 3from bs4 import BeautifulSoup 4import random 5import time 6from fake_useragent import UserAgent 7 8# 通过循环实现多页图片的抓取 9for page in range(1,11): 10 # 生成顶层图片列表页的链接 11 fst_url = r https://colorhub.me/search?tag=data&page={ } .format(page) 12 # 生成UA,用于爬虫请求头的设置 13 UA = UserAgent() 14 # 向顶层链接发送请求 15 fst_response = requests.get(fst_url, headers = { User-Agent :UA.random}) 16 # 解析顶层链接的源代码 17 fst_soup = BeautifulSoup(fst_response.text) 18 # 根据HTML的标记规则,返回次层图片详情页的链接和图片名称 19 sec_urls = [i.find( a )[ href ] for i in fst_soup.findAll(name = div , attrs = { class : card })] 20 pic_names = [i.find( a )[ title ] for i in fst_soup.findAll(name = div , attrs = { class : card })] 21 # 对每一个次层链接做循环 22 for sec_url,pic_name in zip(sec_urls,pic_names): 23 # 生成UA,用于爬虫请求头的设置 24 UA = UserAgent() 25 ua = UA.random 26 # 向次层链接发送请求 27 sec_response = requests.get(sec_url, headers = { User-Agent :ua}) 28 # 解析次层链接的源代码 29 sec_soup = BeautifulSoup(sec_response.text) 30 # 根据HTML的标记规则,返回图片链接 31 pic_url = https: + sec_soup.find( img ,{ class : card-img-top })[ src ] 32 # 对图片链接发送请求 33 pic_response = requests.get(pic_url, headers = { User-Agent :ua}) 34 # 将二进制的图片数据写入到本地(即存储图片到本地) 35 with open(pic_name+ .jpg , mode = wb ) as fn: 36 fn.write(pic_response.content) 37 # 生成随机秒数,用于也没的停留 38 seconds = random.uniform(1,3) 39 time.sleep(seconds) 不难发现,代码的核心部分就16行,还是很简单的吧。还不赶快去测试一下这里的代码哦(如果你对某个方面感兴趣,如商务、建筑、植物等,通过搜索,找到顶层页链接,源码下载替换代码中的fst_url值即可)。
在运行完如上代码后,将会抓取ColorHub网站中的10页图片,一共包含325张高清图片,展示如下: