前言
嗨喽,大家好,这里是魔王~
[课题]:
Python零基础爬虫之回车桌面壁纸
[课题介绍]:
壁纸不应该只是一张图片,它应该是一门哲学
回车桌面网100000张无水印,高分辨率,电脑桌面壁纸,
包括汽车,植物,动物,手机,美女,创意设计,摄影,旅游,以及绿色保护眼睛的壁纸等等
今天通过Python程序,采集上面大量的壁纸
[课程亮点]:
1、系统性分析页面2、多页面数据解析3、海量图片数据保存
[环境]:
python3.8pycharm.2requestsparsel
+python安装包 安装教程视频 anaconda等等 安装包
+pycharm社区版 专业版 及 激活码私我免费获取
爬虫基本思路:
一. 目标网站分析二. 代码实现1. 通过requests发送网络请求 获取到数据2. 通过re正则表达式在 网页源代码当中 提取需要的数据提取壁纸标题以及详情页链接3. 通过requests向每个壁纸详情页发送请求 获取到每个页面的数据4. 使用css选择器在所有页面的网页源代码当中 提取需要的数据提取所有的图片链接5. 通过requests向每个壁纸链接发送网络请求 获取到图片的二进制数据6. 保存图片三. 多页内容爬取四. 自动更换壁纸
“”"
导入模块
import requestsimport reimport parselimport os
爬取图片代码
for page in range(1, 11):print(f'-------------------------------------正在爬取第{page}页-------------------------------------')
# 1. 通过requests发送网络请求 获取到数据
html_data = requests.get(f'/{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 win32apiimport win32conimport win32guiimport osimport 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=0print(L2) # 壁纸文件夹url_list = []for l2 in L2:detail_path = path + '\\' + l2L3 = 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 += 1if i == len(url_list): # 如果是最后一张图片,则重新到第一张i = 0
def changeWallpaper_2():"""文件夹/图片"""path=input('请输入文件路径:')L2=os.listdir(path=path) # 得到文件路径下的图片,列表类型i=0print(L2)while True:Windows_img(path+'\{}'.format(L2[i]))print(path+'\{}'.format(L2[i]))time.sleep(10) # 设置壁纸更换间隔,这里为10秒,根据用户自身需要自己设置秒数i += 1if i==len(L2): # 如果是最后一张图片,则重新到第一张i=0
if __name__ == '__main__':changeWallpaper()
好了,我的这篇文章写到这里就结束啦!
有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!