首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

爬虫思路

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

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

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

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

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

# 导入第三方包

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张高清图片,展示如下:

来源网络,侵权联系删除

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190729A05EZV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券