Ajax-爬取多页图片

2023-11-01

一、目的

  1. 爬取多页图片
  2. 图片网页地址:https://picsum.photos/images
  3. 关键点:上述的网页HTML代码中并无图片地址,图片是通过Ajax请求的json数据,我们需要找到图片真正的地址

二、代码

import requests
import os


def get_page(url):
    try:
        header = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'}
        r = requests.get(url, headers=header)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.json()

    except:
        print("出现异常")


def parse_page(data_list):
    imgs_url = []
    for data in data_list:
        imgs_url.append(data.get('download_url'))
    return imgs_url


def save_imgs(imgs_url):
    root = "images/"
    if not os.path.exists(root):
        os.mkdir(root)
    for img_url in imgs_url:
        img_name = root + img_url.split("/")[-3] + ".jpg"
        print('{0:<15}'.format(img_name), end=": ")
        if not os.path.exists(img_name):
            print("正在下载...", end=" ")
            r = requests.get(img_url)
            with open(img_name, "wb") as f:
                f.write(r.content)
            print("下载完成!")
        else:
            print("图片已存在!")


if __name__ == '__main__':
	# 爬取4页图片,也可以使用input()手动输入爬取页数
	# page_num = int(input("请输入爬取图片页数:")) 将5替换page_num即可
    for page in range(1, 5):
        url = "https://picsum.photos/v2/list?page="
        print("\n正在获取第" + str(page) + "页")
        url += str(page)
        # 获取页面html
        data_list = get_page(url)
        # 解析页面
        imgs_url = parse_page(data_list)
        # 保存图片
        save_imgs(imgs_url)
    print("所有图片下载完成!")

三、结果


  • 图片存储在程序所在目录images/目录下

四、关键点

本次爬取图片的关键点在于找到图片真正的地址

  1. 按F12审查元素,发现图片地址
  2. 访问该地址,发现其中的图片下载地址download-url
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ajax-爬取多页图片 的相关文章

  • ggplot2中的条形图 geom_bar()

    20150226 1 ggplot 能直接计算aes 中x变量各个分类的数目 所以可以直接用原始数据 而不用像plot 一样要table 数据 2 geom bar mapping NULL data NULL stat bin posit
  • 从零搭建 Spring Cloud 服务(超级详细)

    点击上方 Java后端 选择 设为星标 优质文章 及时送达 作者 Anakki 链接 blog csdn net qq 29519041 article details 85238270 这里会介绍很多基础知识 直接想开始搭建微服务的可以看
  • 小学思品课如何使用计算机教学设计,关于小学思品教学设计与反思

    关于小学思品教学设计与反思 小学思想品德节约用水教学设计与反思 节约用水 教学设计与反思 一 指导思想 品德与生活课 注重学生的实践与参与性 突出教学实效性 让学生通过丰富的教学活动去亲身体验 亲自感受水的重要与水资源的匮乏 从而形成自觉的
  • Win10 系统下VisualStudio2019 配置Open3D-0.15.2(C++)

    目录 一 下载Open3D 0 15 2 二 编译 font color dd00dd 1 新建文件 CmakeList txt TestVisualizer h TestVisualizer cpp font color dd00dd 2
  • 进程、线程与JVM、CLR

    进程和线程的关系 网上有一副很经典的图可以让我们来理解进程和线程的关系 下面这副图是一个双向多车道的道路图 假如我们把整条道路看成是一个 进程 的话 那么图中由白色虚线分隔开来的各个车道就是进程中的各个 线程 了 这副图出自 http ww
  • chroot命令的基本用法

    chroot 切换根目录 chroot PATH TO TEMPROOT COMMAND chroot test virrot bin bash 切换根目录 并明确指明运行那个目录下面的bash 例子 切换根目录 root gdy ftpf
  • 实战Elastic Stack分析K8S应用日志--部署logstash

    logstash从kafka取数据输出到es 部署logstash docker pull logstash 6 8 6 docker images grep logstash docker tag d0a2dac51fcb harbor
  • 【M malloc送书第二期】朋友圈大佬都去读研了,这份备考书单我码住了!

    文章目录 01 数据结构与算法分析 02 计算机网络 自顶向下方法 03 现代操作系统 04 深入理解计算机系统 01 概率论基础教程 原书第10版 03 线性代数及其应用 八九月的朋友圈刮起了一股晒通知书潮 频频有大佬晒出 研究生入学通知
  • JSONObject与JSONArray总结及部分使用

    例如 取出name4值过程步骤 1 将以上字符串转换为JSONArray对象 2 取出对象的第一项 JSONObject对象 3 取出name1的值JSONObject对象 4 取出name2的值JSONObject对象 5 取出name4
  • 【react】高阶函数_函数柯里化

    高阶函数 如果一个函数符合下面2个规范中的任何一个 那该函数就是高阶函数 1 若A函数 接受的参数是一个函数 那么A就可以称之为高阶函数 2 若A函数 调用的返回值依然是一个函数 那么A就可以称之为高阶函数 常见的高阶函数有 Promise
  • JetBrain系列软件使用

    一 PHPSTORM 非常好用的插件 支持对一些动态调用的函数快速跳到函数定义处 DynamicReturnTypePlugin FIle gt Settings gt Plugins gt Marketplace 输入 DynamicRe
  • 使用Python对一张图像进行高斯模糊

    import cv2 src cv2 imread test jpg numpy数组 第二个参数 高斯核的宽和高 建议是奇数 第三个参数 x和y轴的标准差 result cv GaussianBlur src 45 45 15 cv2 im

随机推荐