Ajax-爬取多页图片

文章目录

    • 一、目的
    • 二、代码
    • 三、结果
    • 四、关键点

一、目的

  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("所有图片下载完成!")

三、结果

Ajax-爬取多页图片_第1张图片
Ajax-爬取多页图片_第2张图片

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

四、关键点

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

  1. 按F12审查元素,发现图片地址
    Ajax-爬取多页图片_第3张图片
  2. 访问该地址,发现其中的图片下载地址download-url
    Ajax-爬取多页图片_第4张图片

你可能感兴趣的:(#,Python爬虫)