Python必应壁纸爬取系列(一):Bing当天壁纸太美你却爬取不到?使用Python,70行代码保存当天必应的超美壁纸屏保(Python获取Microsoft的当天唯美壁纸)

2021/5/13 20:25:47

本文主要是介绍Python必应壁纸爬取系列(一):Bing当天壁纸太美你却爬取不到?使用Python,70行代码保存当天必应的超美壁纸屏保(Python获取Microsoft的当天唯美壁纸),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

很多时候我们在使用微软的时候都会看到微软提供的一些漂亮的屏保,我们在打开微软官方的搜索引擎Bing时就会看到这样的图片
在这里插入图片描述

那么我们如何爬取这样美丽的图片呢,我们今天就来讲解一下。在这里我要说明的是,我在这里使用的是一个第三方的网站存储的必应图片,也就是说随时有可能不能访问(要是网站挂掉了之后就不行了)。但是这个网站的分类功能真的是我比较喜欢的,所以我还是写一个并不是官方渠道的爬取,如果想看官方渠道爬取的可以访问我的另一篇文章

阅读顺序

  • 网站介绍
  • 捋顺思路
    • 准备工作
    • 定义爬取类
    • 访问网站
    • 获取图片
    • 下载图片
    • 提高分辨率
  • 完整代码
  • 转载声明

网站介绍

Preapix主页

Preapix标签页
这个网站叫做Preapix,是一个典型的外国网站,中国境内可能会出现响应较慢的情况,但是我用测速网站的工具测试了一下,除了云南电信是无法响应之外,国内大部分地区还是可以响应的
在这里插入图片描述
话不多说,我们现在就来分析如何爬取这个网站的图片

捋顺思路

准备工作

首先我们写一下这样的代码,如果我们看到可以访问的话,证明我们已经实现了第一步网络基础了,接下来就是要进行再一次测速
在这里插入图片描述
如果在五秒钟之类运行完了程序,那么证明我们的网速是可以的
在这里插入图片描述

import requests

# 爬取今日壁纸
res = requests.get("https://img.peapix.com/9048535099617410836.jpg")
print(res)

定义爬取类

我们首先先创建几个要使用到的函数
在这里插入图片描述
传参后没有问题及证明我们运行成功
在这里插入图片描述

访问网站

我们可以看到,今日壁纸在一层层嵌套里面
在这里插入图片描述
我们将today_wallpaper函数写入这样几行代码,同时在主函数里面调用today_wallpaper函数,如下图所示
在这里插入图片描述
我们可以发现,这里似乎就是真实图片的地址
在这里插入图片描述
对比一下我们就可以发现,没错了
在这里插入图片描述
访问一下图片,咦,这图片是不是太小了
在这里插入图片描述
不管了,先爬取了再说,把代码变成这样

import requests
from bs4 import BeautifulSoup 

# 定义一个类
class WallPaperGetter():
	def __init__(self,size):
		# 设置传入参数Size
		self.size = size
		self.today_wallpaper()

	# 设置爬取今日壁纸的函数
	def today_wallpaper(self):
		today_img = requests.get("https://peapix.com/")
		today_img = today_img.text

		# 获取我们的HTML解释器
		today_img_soup = BeautifulSoup(today_img,'html.parser')
		# 获取所有col-12 col-md-6 col-lg-3 gallery-relative-image
		today_img_div_all = today_img_soup.find_all("div","col-12 col-md-6 col-lg-3 gallery-relative-image")

		for div in today_img_div_all:
			print(div)

	# 设置壁纸下载的总函数
	def wallpaper_downloader(self):
		pass

WallPaperGetter(1080)

在这里插入图片描述

获取图片

您看,这不就成了吗?再来一波清洗,我们直接获取IMG属性
在这里插入图片描述
完美,成功,接下来就是赋值了
在这里插入图片描述
我们把代码写成这样,也就是加上了赋值和调用下载函数这简单一步
在这里插入图片描述
我们可以看到,我们的调用成功了
在这里插入图片描述

import requests
from bs4 import BeautifulSoup 

# 定义一个类
class WallPaperGetter():
	def __init__(self,size):
		# 设置传入参数Size
		self.size = size
		self.today_wallpaper()

	# 设置爬取今日壁纸的函数
	def today_wallpaper(self):
		today_img = requests.get("https://peapix.com/")
		today_img = today_img.text

		# 获取我们的HTML解释器
		today_img_soup = BeautifulSoup(today_img,'html.parser')
		# 获取所有col-12 col-md-6 col-lg-3 gallery-relative-image
		today_img_div_all = today_img_soup.find_all("div","col-12 col-md-6 col-lg-3 gallery-relative-image")

		# 定义储存列表
		self.img_name_list = []
		self.img_link_list = []

		for div in today_img_div_all:
			img = div.a.img

			img_name = img["alt"]
			self.img_name_list.append(img_name)

			img_link = img["data-src"]
			self.img_link_list.append(img_link)

		self.wallpaper_downloader()

	# 设置壁纸下载的总函数
	def wallpaper_downloader(self):
		print(self.img_link_list)
		print(self.img_name_list)

WallPaperGetter(1080)

下载图片

接下来我们便要开始下载了,由于后面都比较简单,那么我也就不说那么多,直接上代码

import requests
from bs4 import BeautifulSoup 

# 定义一个类
class WallPaperGetter():
	def __init__(self,size):
		# 设置传入参数Size
		self.size = size
		self.today_wallpaper()

	# 设置爬取今日壁纸的函数
	def today_wallpaper(self):
		today_img = requests.get("https://peapix.com/")
		today_img = today_img.text

		# 获取我们的HTML解释器
		today_img_soup = BeautifulSoup(today_img,'html.parser')
		# 获取所有col-12 col-md-6 col-lg-3 gallery-relative-image
		today_img_div_all = today_img_soup.find_all("div","col-12 col-md-6 col-lg-3 gallery-relative-image")

		# 定义储存列表
		self.img_name_list = []
		self.img_link_list = []

		for div in today_img_div_all:
			img = div.a.img

			img_name = img["alt"]
			self.img_name_list.append(img_name)

			img_link = img["data-src"]
			self.img_link_list.append(img_link)

		print("解析完毕")

		self.wallpaper_downloader()

	# 设置壁纸下载的总函数
	def wallpaper_downloader(self):
		# print(self.img_name_list)
		# print(self.img_link_list)
		print("开始获取下载链接")

		len_img = len(self.img_name_list)
		# print(len_img)
		
		# 创建循环
		for num in range(0,len_img):
			# print(num)

			wallpaper_img = requests.get(self.img_link_list[num])
			print(self.img_name_list[num]+"-----访问成功")
			# 获取网页内容
			wallpaper_img = wallpaper_img.content

			# 写入文件
			with open(self.img_name_list[num]+".jpg","wb+")as img_write:
				img_write.write(wallpaper_img)
				print(self.img_name_list[num]+"-----写入成功")
				img_write.close()

WallPaperGetter(1080)

但是我们爬取的结果的分辨率似乎不是特别高啊

提高分辨率

在这里插入图片描述
所以我们要怎样增加分辨率呢?这里其实我们可以来探讨一下,发现我们的链接有没有什么特别奇怪的地方
在这里插入图片描述
有没有觉得这个_480很奇怪呢?
在这里插入图片描述
怎么图片的宽度就是480呢?那我们调一下1080试试
在这里插入图片描述
果然,它变大了,变得和屏幕一样大,那要是不加数字会怎么样呢?
在这里插入图片描述
同样,他其实还是1080,所以默认的图片宽度就是1080,大家也可以试一试别的数字。现在为了提高分辨率,我们更改代码为这样
在这里插入图片描述
使用REPLACE方法代替字符串,并且将其变成我们所传入的参数
在这里插入图片描述
也可以加一下STR转换一下我们参数的类型
在这里插入图片描述
其实REPLACE函数并不会更改原字符串,所以我们要重新来一次赋值

在这里插入图片描述
在这里插入图片描述
一前一后时间一对比,就立马不同了
在这里插入图片描述

完整代码

import requests
from bs4 import BeautifulSoup 

# 定义一个类
class WallPaperGetter():
	def __init__(self,size):
		# 设置传入参数Size
		self.size = size
		self.today_wallpaper()

	# 设置爬取今日壁纸的函数
	def today_wallpaper(self):
		today_img = requests.get("https://peapix.com/")
		today_img = today_img.text

		# 获取我们的HTML解释器
		today_img_soup = BeautifulSoup(today_img,'html.parser')
		# 获取所有col-12 col-md-6 col-lg-3 gallery-relative-image
		today_img_div_all = today_img_soup.find_all("div","col-12 col-md-6 col-lg-3 gallery-relative-image")

		# 定义储存列表
		self.img_name_list = []
		self.img_link_list = []

		for div in today_img_div_all:
			img = div.a.img

			img_name = img["alt"]
			self.img_name_list.append(img_name)

			img_link = img["data-src"]
			img_link = img_link.replace("_480","_"+str(self.size))
			self.img_link_list.append(img_link)

		print("解析完毕")

		self.wallpaper_downloader()

	# 设置壁纸下载的总函数
	def wallpaper_downloader(self):
		# print(self.img_name_list)
		# print(self.img_link_list)
		print("开始获取下载链接")

		len_img = len(self.img_name_list)
		# print(len_img)
		
		# 创建循环
		for num in range(0,len_img):
			# print(num)

			wallpaper_img = requests.get(self.img_link_list[num])
			print(self.img_name_list[num]+"-----访问成功")
			# 获取网页内容
			wallpaper_img = wallpaper_img.content

			# 写入文件
			with open(self.img_name_list[num]+".jpg","wb+")as img_write:
				img_write.write(wallpaper_img)
				print(self.img_name_list[num]+"-----写入成功")
				img_write.close()

WallPaperGetter(1080)

转载声明

博客在2021年5月13日首发自CSDN,如需转载,请附上原文链接:Python必应壁纸爬取系列(一):Bing当天壁纸太美你却爬取不到?使用Python,70行代码保存当天必应的超美壁纸屏保(Python获取Microsoft的当天唯美壁纸)



这篇关于Python必应壁纸爬取系列(一):Bing当天壁纸太美你却爬取不到?使用Python,70行代码保存当天必应的超美壁纸屏保(Python获取Microsoft的当天唯美壁纸)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程