0%

python爬虫实践:下载壁纸

导入必要的包(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 国际 转载请保留原文链接及作者。

感谢你的支持,希望本文能助你一臂之力。