Bing壁纸一直以来都是WIN7系统里的不可或缺的一道亮丽风景线,其高清、唯美、微妙镜头下的风景一直有着专业、不可比拟的称赞。
Bing壁纸汇集了山水风景壁纸里各式各样的精华,再加上其高清的选材和独特的拍摄视角,给人一种清新、自然并以强烈的视觉刺激。而且在这里您将看到世间最美丽最恢宏的自然画卷,分分钟带给你一场场精彩的视觉盛宴。
今天,小编就为大家带来Bing壁纸专题的爬虫。首先让我们输入网址:
然后我们分析链接的规律:
https://bing.ioliu.cn/?p=2
https://bing.ioliu.cn/?p=3
……
https://bing.ioliu.cn/?p=128
找到链接的规律后,就让我们来查看元素的获取。同样F12审查元素,元素审查分析如下:
接下来让我们进入编码环节:
import requests
import lxml.etree
from time import sleep
import os
class Biying(object):
def __init__(self,req_url):
self.headers = {"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
self.req_url = req_url
#获取页面总数
def getpage(self):
#1 请求数据path
response = requests.get(self.req_url, headers=self.headers)
#2 整理成xml文档
xml = lxml.etree.HTML(response.text)
#3 抽取想要的element 以下是获取类名为page的div标签下的span标签体内容 获取到的内容为:1 / 99
page = xml.xpath('//div[@class="page"]/span')#<div class="page"><a href="/">上一页</a><span>1 / 99</span><a href="/?p=2">下一页</a></div>
#4 通过对字符串分割操作来获取必应壁纸网页页数
str=page[0].text.split(' ')[2]
return (int)(str)
#遍历页面
def Eachpages(self,page,pages,path):
i=page
while i<=pages:
temp=self.req_url+"?p={i}".format(i=i)
print("第{page}页开始下载,当前页url:{url}".format(page=i,url=temp))
count=self.EveryImage(temp,path)
print("第{page}页已下载完成".format(page=i))
i=i+1
if (count == 0):
print("网络出现错误,第{page}页重新下载")
i=i-1
os.system('cls')
def EveryImage(self,url,path):
response = requests.get(url, headers=self.headers)
xml = lxml.etree.HTML(response.text)
imgname = xml.xpath('//div[@class="description"]/h3')
imgurl = xml.xpath('//div[@class="card progressive"]/img')
print("当前页面有{}张壁纸".format(len(imgurl)))
count = 0
for n, u in zip(imgname, imgurl):
name = n.text.split(' ')[0]
img_url = u.xpath('@src')[0]
count += 1
print("第{}张壁纸 描述:{} 壁纸url:{}".format(count,name,url))
self.download(name,img_url,path)
return count
def exit_info(self,show_info):
print(show_info)
for i in range(5, 0, -1):
print("{sec}秒后退出".format(sec=i))
sleep(1)
def download(self,name,url,path):
response = requests.get(url, headers=self.headers) # 反爬虫,模拟浏览器提交
NAME=""
for i in range(len(name)):
if name[i] not in '/\*:"?<>|':
NAME+=name[i]
isExists = os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录 创建目录操作函数
os.makedirs(path)
filename = path +'\\'+ NAME + ".jpg"
with open(filename, "wb") as f:
f.write(response.content)
f.close()
if __name__ == '__main__':
url="https://bing.ioliu.cn/" #壁纸网页url
By_spider = Biying(url)
pages = By_spider.getpage() #获取页面总数,并且转换为int类型
print("壁纸总页数:{pages}".format(pages=pages)) #打印必应壁纸页数
path = input("输入图片存储路径:")
page=(int)(input("从第几页开始下载(1-{}):".format(pages)))
if page<=0 or page>pages:
By_spider.exit_info("输入页数不合规范,请重新输入")
else:
By_spider.Eachpages(page,pages,path)
By_spider.exit_info("下载完成")
右击运行代码,即可执行,输入想要下载到哪个文件夹内,没有对应文件夹随便输入一个就会自动生成 ,然后输入你想要下载的页数,即从哪页开始下载。如下图即代表程序运行成功。