上一篇文章我们讲述了如何爬取必应的当天壁纸,那么今天我们就来实现如何写出一个随机必应壁纸或区域的程序。有了这个程序,我们就可以按照自己的喜好添加自己喜欢的文件并且下载了
五行代码实现程序效果图
思路分析
我们先随机点入一个图片,可以发现这张图片的网址上面有很多的标签
我们随机点击一个标签后,观看网页网址所发生的变化,我们可以发现,这个网站访问地址的构成是这样的https://peapix.com/bing/tags/<keywords>
所以我们按照这个原则,尝试访问一下animal
,看看能不能进行访问
我们发现,这样子是可以访问的,甚至出现了一些详细的信息,所以我们可以更好地获取相关的图片
我们图片当中的一些简介也是很重要的,我们也可以尝试着将它爬取下来。所以我们首先实现爬取图片的介绍。接着再通过标签爬取图片的更多信息。
代码分析
爬取图片简介
首先为我们先要实现一些基础的代码,如下图,我们先定义一个类,然后创建一个获取图片信息的类。我们的代码也变得清晰易懂
接下来,我们就要分析我们如何获取我们的图片信息。首先我们先打开一个随机打开一个图片。在这里我就直接使用推荐的图片。它的地址是这样的https://peapix.com/bing/34916
。我们可以清晰的看到34916
就是这张图片的ID
这些都是我们需要爬取的对象,所以我们先创建一个程序,先看一下网页源代是长什么样的。
复制以下代码,如果出现了源代码,就证明你访问成功了,那么接下来我们开始分析网页的布局。这一步我们在浏览器给我们提供的开发者工具中进行。
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
self.img_information()
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
print(img.text)
WallPaperGetter("34916")
通过分析我们发现,我们所需要的东西都是在Main当中,所以我们首先使用BS4来分析一下我们的Main页面下面的网页信息。首先我们先导入BS4模块
于是我们再获取我们想要获取的东西,我们继续回到开发者模式分析代码
其实我们的信息还是存储在div代码里面,所以我们创建一个新变量来存储这个container,把代码改成这样
好吧,其实运行结果没有什么区别。我们继续进行分析
我们发现,我们其实只用爬取前面两个div标签就行了。那么首先我们就先爬取这里
首先我们要获取蓝色字体的KEYWORDS
我们观察发现,这些值都是在我们LI标签下面的a标签的String,我们按照这个思路直接编写代码。最后将其加入列表,最后再打印列表
成功了,当然你也可以复制代码试一下
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
self.img_information()
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
key_words_list.append(key_words_msg)
print(key_words_list)
WallPaperGetter("34916")
接下来我们开始访问第二个我们想要爬取的目标,我们再次打开网页
这是两个部分,但是名字都是一样的,我们先看一下图片
我们爬取IMG标签就可以看到我们爬取到了位置,然后就是获取src值
更改代码,将我们后续需要的变量设置为类当中可以访问
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
self.img_information()
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
self.key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
self.key_words_list.append(key_words_msg)
# print(key_words_list)
# 首先我们先获取一下我们的图片位置
self.img_path = container.img["src"]
self.img_word = container.img["alt"]
# print(img_path,img_word)
WallPaperGetter("34916")
我们接下来获取DateTime标签,和前面的操作也是一样的
然后我们获取简介,我们只需要获取所有的p标签的内容就可以了
接下来我们还是用同样的方式爬取标签
这样我们就制作完成了,接下开我们开始第二步,保存图片
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
self.img_information()
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
self.key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
self.key_words_list.append(key_words_msg)
# print(key_words_list)
# 首先我们先获取一下我们的图片位置
self.img_path = container.img["src"]
self.img_word = container.img["alt"]
# print(img_path,img_word)
# 接下来获取图片的时间
self.img_time = container.time.string
# print(self.img_time)
# 获取简介
self.introductory = ""
for a in container.find_all("p"):
msg = a.string
self.introductory = self.introductory + " " + msg
# print(self.introductory)
# 获取相关标签
self.tag_list = []
tag_list = container.find("div",class_="tag-list")
# print(tag_list)
for tag in tag_list.find_all("a"):
tag_item = tag.string
self.tag_list.append(tag_item)
print(self.tag_list)
WallPaperGetter("34916")
保存图片
这一步真的是超简单,首先我们先转换一下清晰度,然后我们再下载就可以了,直接上代码
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
self.key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
self.key_words_list.append(key_words_msg)
# print(key_words_list)
# 首先我们先获取一下我们的图片位置
self.img_path = container.img["src"]
self.img_word = container.img["alt"]
# print(img_path,img_word)
# 接下来获取图片的时间
self.img_time = container.time.string
# print(self.img_time)
# 获取简介
self.introductory = ""
for a in container.find_all("p"):
msg = a.string
self.introductory = self.introductory + " " + msg
# print(self.introductory)
# 获取相关标签
self.tag_list = []
tag_list = container.find("div",class_="tag-list")
# print(tag_list)
for tag in tag_list.find_all("a"):
tag_item = tag.string
self.tag_list.append(tag_item)
# print(self.tag_list)
return self.key_words_list,self.img_time,self.img_path,self.img_word,self.introductory,self.tag_list
def save_img(self):
self.img_path = self.img_path.replace("_480","_"+str(self.size))
# 开始下载文件
wallpaper_img = requests.get(self.img_path)
# 获取网页内容
wallpaper_img = wallpaper_img.content
# 写入文件
with open(self.img_word+".jpg","wb+")as img_write:
img_write.write(wallpaper_img)
img_write.close()
if __name__ == '__main__':
bing = WallPaperGetter("34916")
bing_information = bing.img_information()
bing_content = bing.save_img()
随机获取壁纸
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
self.key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
self.key_words_list.append(key_words_msg)
# print(key_words_list)
# 首先我们先获取一下我们的图片位置
self.img_path = container.img["src"]
self.img_word = container.img["alt"]
# print(img_path,img_word)
# 接下来获取图片的时间
self.img_time = container.time.string
# print(self.img_time)
# 获取简介
self.introductory = ""
for a in container.find_all("p"):
msg = a.string
self.introductory = self.introductory + " " + msg
# print(self.introductory)
# 获取相关标签
self.tag_list = []
tag_list = container.find("div",class_="tag-list")
# print(tag_list)
for tag in tag_list.find_all("a"):
tag_item = tag.string
self.tag_list.append(tag_item)
# print(self.tag_list)
return self.key_words_list,self.img_time,self.img_path,self.img_word,self.introductory,self.tag_list
def save_img(self):
self.img_path = self.img_path.replace("_480","_"+str(self.size))
# 开始下载文件
wallpaper_img = requests.get(self.img_path)
# 获取网页内容
wallpaper_img = wallpaper_img.content
# 写入文件
with open(self.img_word+".jpg","wb+")as img_write:
img_write.write(wallpaper_img)
img_write.close()
if __name__ == '__main__':
num = random.randint(10000,40000)
print(num)
bing = WallPaperGetter(str(num))
bing_information = bing.img_information()
bing_content = bing.save_img()
点这里,五行代码实现程序
其实我想着我可以来一个标题党,就像大家今天访问的这样,五行代码实随机保存必应壁纸,具体就是创建两个文件,然后一个文件调用就行了
WallPapperGetter
# 程序名称 : WallPaperGetter.py
# 程序编写者 : ZesenYuan
# 程序运行环境 : Windows 10
# Python版本号 : Python 3.7
# 编写日期 : 2021年5月22日
import requests
from bs4 import BeautifulSoup
from PIL import Image
class WallPaperGetter(): # 创建一个类
def __init__(self,id,size = "1080"): # 定义初始函数,接收传入参数
self.id = id
self.size = size
self.img_information()
def img_information(self): # 定义获取图片信息的函数
# 开始访问我们所需要访问的信息页面
img = requests.get("https://peapix.com/bing/"+str(self.id))
# print(img.text)
img_text = img.text
# 获取我们的HTML解释器
img_soup = BeautifulSoup(img_text,'html.parser')
# 获取Main标签
img_main = img_soup.main
container = img_main.div
# print(container)
# 创建一个列表用来接受关键词
self.key_words_list = []
# 爬取图片的关键词
key_words = container.ol
# 获取所有的li标签
for i in key_words.find_all("li"):
key_words_msg = i.a.string
self.key_words_list.append(key_words_msg)
# print(key_words_list)
# 首先我们先获取一下我们的图片位置
self.img_path = container.img["src"]
self.img_word = container.img["alt"]
# print(img_path,img_word)
# 接下来获取图片的时间
self.img_time = container.time.string
# print(self.img_time)
# 获取简介
self.introductory = ""
for a in container.find_all("p"):
msg = a.string
self.introductory = self.introductory + " " + msg
# print(self.introductory)
# 获取相关标签
self.tag_list = []
tag_list = container.find("div",class_="tag-list")
# print(tag_list)
for tag in tag_list.find_all("a"):
tag_item = tag.string
self.tag_list.append(tag_item)
# print(self.tag_list)
self.save_img()
return self.key_words_list,self.img_time,self.img_path,self.img_word,self.introductory,self.tag_list
def save_img(self):
self.img_path = self.img_path.replace("_480","_"+str(self.size))
# 开始下载文件
wallpaper_img = requests.get(self.img_path)
# 获取网页内容
wallpaper_img = wallpaper_img.content
# 写入文件
with open(self.img_word+".jpg","wb+")as img_write:
img_write.write(wallpaper_img)
img_write.close()
# 然后打开图片
img = Image.open(self.img_word+".jpg")
img.show()
调用代码
from WallPaperGeter import WallPaperGetter
import random
num = random.randint(10000,40000)
bing = WallPaperGetter(num)
系列文章
Python必应壁纸爬取系列(一):Bing当天壁纸太美你却爬取不到?使用Python,70行代码保存当天必应的超美壁纸屏保(Python获取Microsoft的当天唯美壁纸)
转载声明
本文2021年5月22日首发CSDN,如需转载,请附上原文链接:Python必应壁纸爬取系列(二):Bing唯美壁纸太多不知道选哪个?Python五行代码随机帮你挑选必应唯美屏保壁纸图片