当前位置:   article > 正文

基础篇2 浅试Python爬虫爬取图片(二) 使用JSON解析

基础篇2 浅试Python爬虫爬取图片(二) 使用JSON解析

使用pythono爬取图片

上一章基础篇2 浅试Python爬虫爬取图片我们使用的是解析HTML中a标签的下载链接获取的图片

1.分析页面请求响应的数据

我们发现目标网站加载图片的方式为瀑布流加载,所以我们使用HTML分析的时候只能拿到有限的图片
在这里插入图片描述
例如我们将页面滚动条下移至底部的时候触发继续加载的事件,页面继续获取图片资源。
所以我们可以尝试能否直接拿到这段时间浏览器返回的数据
老规矩浏览器F12,切换到网络功能区域,过滤选择XHR
在这里插入图片描述
ok,到这里就出现了。
复制请求到地址栏试一下
在这里插入图片描述

正常返回json数据,其中包含目标下载的downloads路径。

2.尝试请求json数据并且解析目标数据

# -*- 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

打印结果如下
在这里插入图片描述在这里插入图片描述我们需要解析到links下的download属性数值

  • 在遍历的时候直接访问links->download
print(item["links"]["download"])
  • 1

成功获取目标数据,打印结果如下
在这里插入图片描述

3.整合一下

# -*- 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("下载完成")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

看打印结果
在这里插入图片描述
实际下载情况
在这里插入图片描述

这里我们也是发现的问题,部分图片没有名称,这时我们就得在获取图片名称的时候判断一下获取的信息是否为空,为空的时候我们可以依照上一张截取字符串的方法处理,避免图片名为空造成的程序异常。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/363619
推荐阅读
相关标签
  

闽ICP备14008679号