赞
踩
上一章基础篇2 浅试Python爬虫爬取图片我们使用的是解析HTML中a标签的下载链接获取的图片
我们发现目标网站加载图片的方式为瀑布流加载,所以我们使用HTML分析的时候只能拿到有限的图片
例如我们将页面滚动条下移至底部的时候触发继续加载的事件,页面继续获取图片资源。
所以我们可以尝试能否直接拿到这段时间浏览器返回的数据
老规矩浏览器F12,切换到网络功能区域,过滤选择XHR
ok,到这里就出现了。
复制请求到地址栏试一下
正常返回json数据,其中包含目标下载的downloads路径。
# -*- coding:UTF-8 -*-
import requests,json
res = requests.get('https://unsplash.com/napi/photos?page=5&per_page=12')
# 将返回的数据解析成json
data = json.loads(res.text)
# 遍历
for item in data:
print(item)
打印结果如下
我们需要解析到links下的download属性数值
print(item["links"]["download"])
成功获取目标数据,打印结果如下
# -*- coding:UTF-8 -*- import requests,json from contextlib import closing class getImgByJson(object): def __init__(self) -> None: self.target = 'https://unsplash.com/napi/photos?page=5&per_page=12' # 请求的目标json数据 self.urls = [] # 解析的图片下载路径 self.names = [] # 图片名称 def geturl(self): res = requests.get(self.target) # 将返回的数据解析成json data = json.loads(res.text) # 遍历 for item in data: self.urls.append(item["links"]["download"]) #将下载链接存储起来 self.names.append(item["slug"]) def download(self,url,name): # 下载 with closing(requests.get(url)) as r: # 获取图片信息 with open('%s.jpg' % name ,'ab+') as f: # 创建一个.jpg文件 for chunk in r.iter_content(chunk_size=1024): # 写入二进制图片信息 if chunk: f.write(chunk) f.flush # 运行 getimg = getImgByJson() # 获取实例 getimg.geturl() # 解析下载路径 # 下载 print("图片下载中") for i in range(len(getimg.urls)): print("正在下载:"+getimg.names[i]+'.jpg') getimg.download(getimg.urls[i],getimg.names[i]) print("下载完成")
看打印结果
实际下载情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。