导入必要的包(package) 若没有下列的包,可使用pip install 包名
命令安装
re: 使用正则表达式
requests: 向网站发出请求
bs4: 解析网页内容
time: 计算时间
1 2 3 4 import re import time import requests from bs4 import BeautifulSoup
任务要求: 批量下载某网站的壁纸 访问壁纸网站 我选择的是壁纸质量高的wallpapers home点击此处访问 ,网站主页如下
寻找关键页面 点击主页上的View All Wallpapers 注意网址变化 目标页面,出现了参数page=1
,每个页面有12张壁纸信息
查看页面请求头 寻找Host
信息和Headers
信息,使用开发者工具操作,如下
定位壁纸信息 选择元素,找到图片的准确信息,操作步骤如下图
找到壁纸信息 壁纸所在的div
标签的类名为class=pics
准确定位壁纸的地址 在上述页面中点击任意一张壁纸,会出现新页面,在新页面中将鼠标移至Download
处,选择分辨率1920x1080
,浏览器左下角将会出现壁纸的地址信息如下
任务分析 定制请求头和初始变量 1 2 3 4 5 6 7 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', 'Host': 'wallpapershome.com' } size = '1920x1080' # 分辨率 save_path = 'wallpapers_src/' # 本地存储地址 start = time.time() # 程序开始时刻
目标网页的网址规律 因为不仅仅抓取一个页面的壁纸,故可利用page
参数设置请求地址,查看页面数量可知一共有1502张页面,故可如下操作即可访问每个页面
1 2 3 4 5 for i in range(1502): wallpaper_name = [] # 存储每张页面的壁纸名字 url = "https://wallpapershome.com/?page=" + str(i+1) r = requests.get(url, headers=headers) print("状态响应码:", r.status_code)
解析壁纸的地址信息 通过先前的壁纸的地址信息分析可知,每张壁纸存贮在地址https://wallpapershome.com/images/wallpapers/
下,壁纸格式形如分类-分辨率-清晰度-名字.jpg
,故利用获取到的壁纸名,再通过设定分辨率,组合可得到壁纸地址 创建一个处理壁纸名的函数
1 2 3 4 5 6 7 8 def handle_name(line): sep = '-' m = re.match('(.*)/(.*).html$', line) name = m.group(2) name = name.split('-') name.insert(-2, size) name = sep.join(name) return name
再获取每页12张壁纸全名
1 2 3 4 soup = BeautifulSoup(r.content, 'lxml') wallpaper_list = soup.find('div', class_='pics') for j in range(12): wallpaper_name.append(handle_name(wallpaper_list.contents[j].a.get('href')))
辅助信息 检测运行状态
1 2 3 print("正在下载第" + str(i+1) + "个页面") cost = time.time() - start print("已运行时间:" + str(cost) + '秒')
下载每张壁纸 1 2 3 4 5 6 7 for j in range(12): src_url = 'https://wallpapershome.com/images/wallpapers/' + wallpaper_name[j] + '.jpg' with open(save_path+wallpaper_name[j]+'.jpg', 'wb') as f: img = requests.get(src_url).content f.write(img) print('+', end='') f.close()
运行效果如下 可能因为是国外网站的原因,下载速度慢得… -.- 部分运行结果如下
1 2 3 4 5 6 7 8 9 状态响应码: 200 正在下载第69个页面 已运行时间:3.5130293369293213秒 ++++++++++++ 状态响应码: 200 正在下载第70个页面 已运行时间:85.50803112983704秒 ++
大量精美壁纸(free)收入囊中 岂不美哉,妈妈再也不用担心我没有壁纸换了(手动滑稽)
源码地址 点击此处访问
本文标题: python爬虫实践:下载壁纸
文章作者: SkecisAI
发布时间: 2019年11月02日 - 20:02:32
最后更新: 2019年12月15日 - 16:36:16
原始链接: http://www.skecis.top/2019/11/02/python爬虫教程/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
未找到相关的 Issues 进行评论
请联系 @skecis 初始化创建