20行Python代码批量抓取免费高清图片!

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

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

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

爬虫思路

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

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

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

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

所以,爬虫抓取图片的最终目的就是找到高清图片所对应的链接。接下来将通过代码的介绍,呈现三层链接的寻找和请求过程。 

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

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

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

 

责任编辑:庞桂玉 来源: 机器学习算法与Python学习
相关推荐

2020-06-18 15:53:06

Python代码抠图

2022-03-26 22:28:06

加密通信Python

2010-03-04 11:22:59

Python抓取网页图

2024-03-20 09:31:00

图片懒加载性能优化React

2022-05-09 13:59:41

Python提取PPTword文档

2018-03-07 20:00:12

PythonPDFWord

2015-09-21 09:36:54

20 亿代码谷歌

2015-09-18 11:47:45

代码Google管理

2009-09-25 11:14:16

Hibernate批量

2022-09-21 14:17:58

Umi-OCR软件

2023-01-12 08:07:03

Python代码版权

2020-04-24 12:16:48

Python 图像分类实战

2010-03-03 15:39:50

Python抓取网页内

2017-01-06 18:06:22

2016-12-02 08:53:18

Python一行代码

2021-01-08 05:26:31

ServerlessPython 预测

2020-08-13 13:38:04

Excel代码数据

2020-08-12 09:14:45

Python验证码工具

2021-04-22 11:27:24

Python命令水印

2018-02-08 16:45:22

前端JS粘贴板
点赞
收藏

51CTO技术栈公众号