前言
嗨喽,大家好,这里是魔王~
[课题]:
Python零基础爬虫之回车桌面壁纸
[课题介绍]:
壁纸不应该只是一张图片,它应该是一门哲学
回车桌面网100000张无水印,高分辨率,电脑桌面壁纸,
包括汽车,植物,动物,手机,美女,创意设计,摄影,旅游,以及绿色保护眼睛的壁纸等等
今天通过Python程序,采集上面大量的壁纸
[课程亮点]:
1、系统性分析页面
2、多页面数据解析
3、海量图片数据保存
[环境]:
python3.8
pycharm2021.2
requests
parsel
+python安装包 安装教程视频 anaconda等等 安装包
+pycharm社区版 专业版 及 激活码私我免费获取
爬虫基本思路:
一. 目标网站分析
二. 代码实现
1. 通过requests发送网络请求 获取到数据
2. 通过re正则表达式在 网页源代码当中 提取需要的数据
提取壁纸标题以及详情页链接
3. 通过requests向每个壁纸详情页发送请求 获取到每个页面的数据
4. 使用css选择器在所有页面的网页源代码当中 提取需要的数据
提取所有的图片链接
5. 通过requests向每个壁纸链接发送网络请求 获取到图片的二进制数据
6. 保存图片
三. 多页内容爬取
四. 自动更换壁纸
“”"
导入模块
import requests
import re
import parsel
import os
爬取图片代码
for page in range(1, 11):
print(f'-------------------------------------正在爬取第{page}页-------------------------------------')
# 1. 通过requests发送网络请求 获取到数据
html_data = requests.get(f'https://mm.enterdesk.com/{page}.html').text
# 2. 通过re正则表达式在 网页源代码当中 提取需要的数据
# 提取壁纸标题以及详情页链接
detail_url_list = re.findall('<div><a href="(.*?)" target="_blank">(.*?)</a>', html_data)
for detail_url, detail_title in detail_url_list:
print(f'***************正在爬取{detail_title}***************')
# 3. 通过requests向每个壁纸详情页发送请求 获取到每个页面的数据
detail_html_data = requests.get(detail_url).text
# 4. 使用css选择器在所有页面的网页源代码当中 提取需要的数据
selector = parsel.Selector(detail_html_data)
# 准备一个文件夹 存放壁纸
if not os.path.exists('img/' + detail_title):
os.mkdir('img/' + detail_title)
# 提取所有的图片链接
img_src_list = selector.css('.swiper-slide a img::attr(src)').getall()
for img_src in img_src_list:
# 替换大壁纸,太小了不叫壁纸
img_url = img_src.replace('_360_360', '_source')
# 5. 通过requests向每个壁纸链接发送网络请求 获取到图片的二进制数据
img_data = requests.get(img_url).content
# 在链接中提取图片标题
img_title = img_url.split('/')[-1]
# 6. 保存图片
with open(f'img/{detail_title}/{img_title}', mode='wb') as f:
f.write(img_data)
print(img_title, '爬取成功!!!')
print(detail_title, '爬取成功!!!')
自动换壁纸代码
导入模块
import win32api
import win32con
import win32gui
import os
import time
def Windows_img(paperPath):
k=win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control panel\\Desktop",0,win32con.KEY_SET_VALUE)
# 在注册表中写入属性值
win32api.RegSetValueEx(k,"wapaperStyle",0,win32con.REG_SZ,"2") # 0 代表桌面居中 2 代表拉伸桌面
win32api.RegSetValueEx(k,"Tilewallpaper",0,win32con.REG_SZ,"0")
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,paperPath,win32con.SPIF_SENDWININICHANGE) # 刷新桌面
def changeWallpaper():
"""文件夹/文件夹/图片"""
path=input('请输入文件路径:')
L2=os.listdir(path=path) # 得到文件路径下的壁纸文件夹,列表类型
i=0
print(L2) # 壁纸文件夹
url_list = []
for l2 in L2:
detail_path = path + '\\' + l2
L3 = os.listdir(detail_path) # 得到壁纸文件夹路径下的图片,列表类型
for l3 in L3:
url_list.append(detail_path + '\\' + l3)
print(url_list)
while True:
Windows_img(url_list[i])
print('{}'.format(url_list[i]))
time.sleep(2) # 设置壁纸更换间隔,这里为10秒,根据用户自身需要自己设置秒数
i += 1
if i == len(url_list): # 如果是最后一张图片,则重新到第一张
i = 0
def changeWallpaper_2():
"""文件夹/图片"""
path=input('请输入文件路径:')
L2=os.listdir(path=path) # 得到文件路径下的图片,列表类型
i=0
print(L2)
while True:
Windows_img(path+'\{}'.format(L2[i]))
print(path+'\{}'.format(L2[i]))
time.sleep(10) # 设置壁纸更换间隔,这里为10秒,根据用户自身需要自己设置秒数
i += 1
if i==len(L2): # 如果是最后一张图片,则重新到第一张
i=0
if __name__ == '__main__':
changeWallpaper()
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!