前言
本次博主以爬取电脑壁纸为例,大家仔细看过这篇博文后,都能够照着套出来,爬取自己想爬取的壁纸。
以下分辨率都能爬取,博主爬取的是1920×1080,绝对的高清大图,看下去,你绝对会有所收获😊
一、网页分析
进入ZOL壁纸网站
点击电脑壁纸
随便点一个进去
OK,看到这里心里就有个大概流程了
再看网页的数据是否是动态加载的,答案是否
注意了,以下是个要点
赋值打印的html到html文件中,发现
这是一个网页编码问题,确实是一个常见问题
查看网页编码
- 方式一
可见网页编码为GBK
- 方式二
虽然两种方式得到的编码不一样,但都能解决问题
所以我们爬取的时候要记得设置编码
二、完整代码及代码分析
import requests
from bs4 import BeautifulSoup
import os
#请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.52"
}
#爬取下载
def download(response):
data = BeautifulSoup(response.text, "lxml")
#参考图1,每一个li都是一个系列的图片
ul_list = data.find_all(class_="photo-list-padding")
#遍历
for ul in ul_list:
# 基础路径
path = "./图库"
# 解析
li = BeautifulSoup(str(ul), "lxml")
# 详情页网址
page_url = "http://desk.zol.com.cn" + li.find(class_="pic")["href"]
# 图片系列名称
name = li.find("em").text
# 拼接保存路径(根据图片系列不同,分类保存)
path = path + "/" + name
# 如果不存在就创建该文件夹
if not os.path.exists(path):
os.makedirs(path)
# 详情页请求
page_response = requests.get(url=page_url, headers=headers)
# 设置页面编码
page_response.encoding = "GB2312"
page_data = BeautifulSoup(page_response.text, "lxml")
#参考图2
li_list = page_data.find(class_="photo-list-box").find_all("li")
#图片名称,每张图片都没有确切的名称,所以我是用1、2、3、4来命名
i = 0
for page_li in li_list:
i += 1
image = BeautifulSoup(str(page_li), "lxml")
#参考图3
#从第5张图片开始,参数名称有所不同,所以需要判断
if i > 4:
img_url = image.find("img")["srcs"]
else:
img_url = image.find("img")["src"]
# 替换掉144x90的分辨率,设置为1920x1080分辨率
#参考图4,也可以替换成你自己想要的分辨率,也可以访问下载
image_url = img_url.replace("144x90", "1920x1080")
print(image_url)
# 发起图片请求,content返回的是bytes,二级制型的数据。
res = requests.get(url=image_url, headers=headers).content
# 图片保存
with open(path + "/" + str(i) + ".jpg", 'wb')as f: # 以wb方式打开文件,b就是binary的缩写,代表二进制
f.write(res)
print("+" * 40)
if __name__ == "__main__":
#进行多页爬取,参考图5
for i in range(3):
url = "http://desk.zol.com.cn/pc/"+str(i + 1)+".html"
response = requests.get(url=url, headers=headers)
response.encoding = "GB2312"
download(response)
三、图片辅助分析
图1
图2
图3
图4
图5
四、运行结果
博主会持续更新,有兴趣的小伙伴可以点赞、关注和收藏下哦,你们的支持就是我创作最大的动力!