一、目的
- 爬取多页图片
- 图片网页地址:https://picsum.photos/images
- 关键点:上述的网页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("所有图片下载完成!")
三、结果
四、关键点
本次爬取图片的关键点在于找到图片真正的地址
- 按F12审查元素,发现图片地址
- 访问该地址,发现其中的图片下载地址
download-url