网页源代码抓取工具(如何将网站中的图片存储到本地呢(上) )
优采云 发布时间: 2022-04-16 02:23网页源代码抓取工具(如何将网站中的图片存储到本地呢(上)
)
我相信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张高清图片,如下图: