DrissionPage 实战:极简壁纸爬取之旅
引言
在这个信息爆炸的时代,我们每天都被海量的图片和信息所包围,但有时候,我们只想要一些简单而纯粹的美。极简壁纸以其简洁、干净的风格,成为了许多人桌面背景的首选。今天,我将带领大家使用DrissionPage这一强大的工具,来实现自动化爬取极简壁纸网站的图片。
DrissionPage 简介
DrissionPage 是一个基于Python的网页自动化工具,它能够帮助我们模拟浏览器操作,实现网页的自动化访问、元素定位、点击等操作。它支持Chrome浏览器,可以与Selenium等工具相媲美,但DrissionPage更加轻量级,启动速度更快。
环境准备
在开始之前,请确保你已经安装了以下工具和库:
- Python 3.x
- DrissionPage
- requests
- os
如果尚未安装DrissionPage和requests,可以通过pip进行安装:
pip install DrissionPage requests
代码实现
1. 导入必要的库
# -*- encoding:utf-8 -*-
from DrissionPage import ChromiumPage
import os
import requests
from TimePinner import Pinner # 导入计时工具
2. 初始化计时器和页面对象
pinner = Pinner() # 创建计时器对象
pinner.pin() # 标记开始记录
page = ChromiumPage() # 创建页面对象
3. 创建保存图片的目录
save_dir = './imgs'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
4. 访问目标网页并开始爬取
page.get('https://bz.zzzmh.cn/index') # 访问目标网页
5. 遍历并下载图片
我们将遍历两页的图片,以节省目标网站的流量。
for _ in range(2):
for button in page.s_eles('.down-span'):
a = button('t:a')
img_url = a.attr('href')
print(img_url) # 打印图片链接
response = requests.get(img_url, stream=True)
img_name = img_url.split('/')[-1].split('.')[0] + '.jpg'
img_path = os.path.join(save_dir, img_name)
with open(img_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存: {img_path}")
next_button = page('下一页')
if next_button:
next_button.click()
page.wait.load_start() # 等待页面加载
else:
break
6. 记录并打印爬取用时
pinner.pin('用时') # 记录并打印时间
结语
通过以上步骤,我们成功地实现了使用DrissionPage自动化爬取极简壁纸网站的功能。这不仅节省了我们手动下载图片的时间,也让我们对网页自动化有了更深的理解。希望这篇文章能够帮助到对网页自动化感兴趣的你,让我们一起探索更多的可能性!
代码结果
附录
- DrissionPage文档: DrissionPage官方文档
- 代码示例: GitHub上的示例代码)
完整代码:
# -*- encoding:utf-8 -*-
from DrissionPage import ChromiumPage
import os
import requests
from TimePinner import Pinner # 导入计时工具
pinner = Pinner() # 创建计时器对象
pinner.pin() # 标记开始记录
# 创建页面对象
page = ChromiumPage()
# 创建保存图片的目录
save_dir = './imgs'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 访问目标网页
page.get('https://bz.zzzmh.cn/index')
# 爬取2页,给作者省点流量
for _ in range(2):
# 遍历一页中所有壁纸图片
for button in page.s_eles('.down-span'):
# 获取封面图片对象
a = button('t:a')
img_url = a.attr('href')
print(img_url) # 打印图片链接
# 保存图片
response = requests.get(img_url, stream=True)
img_name = img_url.split('/')[-1].split('.')[0] + '.jpg'
img_path = os.path.join(save_dir, img_name)
with open(img_path, 'wb') as f:
f.write(response.content)
print(f"图片已保存: {img_path}")
# 点击下一页
next_button = page('下一页')
if next_button:
next_button.click()
page.wait.load_start() # 等待页面加载
else:
break
pinner.pin('用时') # 记录并打印时间